《機器學習》 周志華 課後作業 9 4

2021-08-28 20:44:15 字數 2644 閱讀 1278

思路參考了

資料集放在這裡。

# -*- coding: utf-8 -*-

"""created on mon oct 8 14:42:27 2018

《機器學習》課後9.4 k-means演算法實現

@author: lichen

"""import matplotlib.pyplot as plt

import numpy as np

import pandas as pd

import random

filepath=open('s:/機器學習-周志華/西瓜資料集4.0.csv')

data = pd.read_csv(filepath, sep = ',')[["密度","含糖率"]].values.tolist() #tolist:ndarray轉換為list

k=4 #k值設定,2,3,4

mean_vectors = random.sample(data,k) #初始化均值向量,隨機k個

x0= list(map(lambda arr:arr[0],mean_vectors))

y0=list(map(lambda arr:arr[1],mean_vectors))

#將初試的均值向量用紅色的方塊表示出

plt.scatter(x0,y0,c = 'r',marker=',')

#計算歐式距離

def distance(p1,p2):

sum=0

for i,j in zip(p1,p2):

sum=sum+(i-j)**2

return np.sqrt(sum)

time=0 #迴圈次數

clusters= #聚類初始化

while time<100: #迴圈次數限制

clusters = list(map ((lambda x:[x]), mean_vectors) )

change=1

for sample in data:

dist=

for j in mean_vectors:

new_mean_vectors =

for c,v in zip(clusters,mean_vectors):

c_num=len(c)

c_array=np.array(c)

v_array=np.array(v)

new_mean_vector = sum(c_array)/c_num

if all(np.true_divide((new_mean_vector-v_array),v_array) < np.array([0.0001,0.0001]) ):

change=0

else:

if change==1 :

mean_vectors = new_mean_vectors

else :

break

time=time+1

#show the clustering result

x1= list(map(lambda arr:arr[0],clusters[0]))

y1=list(map(lambda arr:arr[1],clusters[0]))

x2= list(map(lambda arr:arr[0],clusters[1]))

y2=list(map(lambda arr:arr[1],clusters[1]))

x3= list(map(lambda arr:arr[0],clusters[2]))

y3=list(map(lambda arr:arr[1],clusters[2]))

x4= list(map(lambda arr:arr[0],clusters[3]))

y4=list(map(lambda arr:arr[1],clusters[3]))

plt.scatter(x1,y1,c = 'y',marker='x', label='class1')

plt.scatter(x2,y2,c = 'g',marker='^', label='class2')

plt.scatter(x3,y3,c = 'blue',marker='*', label='class3')

plt.scatter(x4,y4,c = 'black',marker='+', label='class4')

plt.xlabel('density')

plt.ylabel('sugar_content')

plt.show()

結果因均值向量的初始值不同而不同,如下所示:(k=4)

紅色的方塊的是初始化的均值向量,我們可以看出:初始中心越分散,結果越好。

Java課後作業

問題 某機構2006年培養學員8萬人,每年增長25 請問按此增長速度,到哪一年培訓學員人數將達到20萬人?一 1.用while迴圈語句 public class w system.out.println 到 c 年人數達到20萬 輸出結果 2.用do.while迴圈語句 某機構2006年培養學員8萬...

課後作業4

班級 軟體四班 學號 2016035107136 姓名 劉聰 開發的軟體 飛機大戰 團隊職務 軟體工程師 負責工作 飛機大戰遊戲設計及其 編寫,優化遊戲體驗,完善修復程式的bug。其他的回答在最下方 上述為 倉庫的提交記錄,從2018 11 02到2018 12 25差不多每天都在編寫 向 倉庫提交...

課後作業2

學號 2017035107134 姓名 劉佔鋒 我的碼雲貪吃蛇專案倉庫 psp我的估計 實際情況 計畫10分鐘 10分分鐘 計畫文件 10分鐘 10分鐘 分析10分鐘 5分鐘開始編寫 50分鐘 60分鐘 執行修改 10分鐘 15分鐘 記錄5分鐘 8分鐘總結 10分分鐘 12分鐘 換顏色 多方面換顏色...