第八次作業

2022-04-27 23:52:30 字數 4017 閱讀 8683

用python實現k均值演算法,鳶尾花花瓣長度資料做聚類並用散點圖顯示。

**:

import

numpy as np

#隨機生成乙個陣列

x = np.random.randint(1,100,[20,1])

y = np.zeros(x.shape[0],dtype=int)

k = 3iris_length = [1.4, 1.4, 1.3, 1.5, 1.4, 1.7, 1.4, 1.5, 1.4, 1.5, 1.5, 1.6, 1.4, 1.1, 1.2, 1.5, 1.3, 1.4, 1.7, 1.5, 1.7, 1.5, 1.0, 1.7, 1.9, 1.6, 1.6, 1.5, 1.4, 1.6, 1.6, 1.5, 1.5, 1.4, 1.5, 1.2, 1.3, 1.4, 1.3, 1.5, 1.3, 1.3, 1.3, 1.6, 1.9, 1.4, 1.6, 1.4, 1.5, 1.4, 4.7, 4.5, 4.9, 4.0, 4.6, 4.5, 4.7, 3.3, 4.6, 3.9, 3.5, 4.2, 4.0, 4.7, 3.6, 4.4, 4.5, 4.1, 4.5, 3.9, 4.8, 4.0, 4.9, 4.7, 4.3, 4.4, 4.8, 5.0, 4.5, 3.5, 3.8, 3.7, 3.9, 5.1, 4.5, 4.5, 4.7, 4.4, 4.1, 4.0, 4.4, 4.6, 4.0, 3.3, 4.2, 4.2, 4.2, 4.3, 3.0, 4.1, 6.0, 5.1, 5.9, 5.6, 5.8, 6.6, 4.5, 6.3, 5.8, 6.1, 5.1, 5.3, 5.5, 5.0, 5.1, 5.3, 5.5, 6.7, 6.9, 5.0, 5.7, 4.9, 6.7, 4.9, 5.7, 6.0, 4.8, 4.9, 5.6, 5.8, 6.1, 6.4, 5.6, 5.1, 5.6, 6.1, 5.6, 5.5, 4.8, 5.4, 5.6, 5.1, 5.1, 5.9, 5.7, 5.2, 5.0, 5.2, 5.4, 5.1]

#選取前k個值作為中心值

defintcenter(myarr,k):

return

x[:k]

kc =intcenter(x,k)

#計算距離

defnearest(kc, i):

d = abs(kc -i)

w = np.where(d ==np.min(d))

return

w[0][0]

#計算樣本中每個資料應該為哪個類

defxclassify(x,y,kc):

for i in

range(x.shape[0]):

y[i] =nearest(kc, x[i])

returny#

更新聚類中心

defkcmean(x,y,kc,k):

l =list(kc)

flag =false

for i in

range(k):

part = np.where(y ==i)[0]

if len(np.where(y == i)[0]) ==0:

newcenter =l[i]

else

: newcenter =np.mean(x[part])

if newcenter != l[i]: #

如果原中心和新中心不相等,就再賦值,並標記

l[i] =newcenter

flag = true #

標記return

np.array(l),flag#整合

defk_means(x,k):

y =np.zeros(x.shape[0])

#選取k個中心

kc =intcenter(x,k)

#每個元素進行分類,重新計算新中心,並判斷中心是否發生變化

flag =true

while

flag:

y =xclassify(x,y,kc)

result,flag =kcmean(x,y,kc,k)

return

result

#不斷迭代分類

flag =true

while

flag:

y =xclassify(x,y,kc)

kc,flag =kcmean(x,y,kc,k)

print

(kc,flag)

#用鳶尾花花瓣作分析

x =np.array(iris_length)

y =np.zeros(x.shape[0])

kc = intcenter(x,3)

flag =true

while

flag:

y =xclassify(x,y,kc)

kc,flag = kcmean(x,y,kc,3)

print

(kc,flag)

#分析鳶尾花花瓣長度的資料,並用散點圖表示出來

import

matplotlib.pyplot as plt

plt.scatter(iris_length, iris_length, marker='

p', c=y, alpha=0.5, linewidths=4, cmap='

rainbow')

plt.show()

截圖:

用sklearn.cluster.kmeans,鳶尾花花瓣長度資料做聚類並用散點圖顯示,鳶尾花完整資料做聚類並用散點圖顯示。

**:

import

numpy as np

from sklearn.cluster import

kmeans

from sklearn.datasets import

load_iris

from matplotlib import

pyplot

iris_data =load_iris()

#花瓣長度做聚類

iris_length = iris_data.data[:, 2:3]

x1 =iris_length

k_means1 = kmeans(n_clusters=3)

result1 =k_means1.fit(x1)

kc1 =result1.cluster_centers_

y_kmeans1 =k_means1.predict(x1)#畫圖

pyplot.scatter(x1,np.linspace(1,150,150),c=y_kmeans1,marker='

x',cmap='

rainbow

',linewidths=4)

pyplot.show()

#完整資料的聚類

x2 =iris_data.data

k_means2 = kmeans(n_clusters=3)

result2 =k_means2.fit(x2)

kc2 =result2.cluster_centers_

y_kmeans2 =k_means2.predict(x2)

print

(y_kmeans2, kc2)

print

(kc2.shape, y_kmeans2.shape, x2.shape)

pyplot.scatter(x2[:, 0], x2[:, 1], c=y_kmeans2, marker='

p', cmap='

rainbow

', linewidths=4, alpha=0.6)

pyplot.show()

截圖:花瓣長度聚類散點

完整資料聚類散點圖:

第八次作業

練習題 1 怎麼查出通過 from xx import xx導 的可以直接調 的 法?在test package資料夾中建立 init py檔案,裡邊什麼都不需要編輯。在 中把test package的檔案的路徑加入到python直譯器可以搜尋到的路徑列表中,這裡就用到了python的包sys模組 ...

第八次作業

問題 答案這個作業屬於那個課程 c語言程式設計ii 這個作業要求在 我在這個課程的目標是 更加熟練掌握markdown語法的相關用法 這個作業在那個具體方面幫助我實現目標 更加熟練的使用markdown,對本週知識總結 參考文獻 pta常見問題解析,c語言程式設計 1.pta實驗作業 1.1 求整數...

第八次作業

一 hive用本地檔案進行詞頻統計 1.準備本地txt檔案 2.啟動hadoop,啟動hive 3.建立資料庫,建立文字表 4.對映本地檔案的資料到文字表中 5.hql語句進行詞頻統計交將結果儲存到結果表中 6.檢視統計結果 二 hive用hdfs上的檔案進行詞頻統計 1.準備電子書或其它大的文字檔...