軟體——機器學習與Python,聚類,K——means

來源:互聯網
上載者:User

標籤:log   預設   .com   hub   載入   目錄   輸出   變數   一個   

 K-means是一種聚類演算法:

這裡運用k-means進行31個城市的分類

城市的資料儲存在city.txt檔案中,內容如下:

BJ,2959.19,730.79,749.41,513.34,467.87,1141.82,478.42,457.64
TianJin,2459.77,495.47,697.33,302.87,284.19,735.97,570.84,305.08
HeBei,1495.63,515.90,362.37,285.32,272.95,540.58,364.91,188.63
ShanXi,1406.33,477.77,290.15,208.57,201.50,414.72,281.84,212.10
NMG,1303.97,524.29,254.83,192.17,249.81,463.09,287.87,192.96
LiaoNing,1730.84,553.90,246.91,279.81,239.18,445.20,330.24,163.86
JiLin,1561.86,492.42,200.49,218.36,220.69,459.62,360.48,147.76
HLJ,1410.11,510.71,211.88,277.11,224.65,376.82,317.61,152.85
ShangHai,3712.31,550.74,893.37,346.93,527.00,1034.98,720.33,462.03
JiangSu,2207.58,449.37,572.40,211.92,302.09,585.23,429.77,252.54
ZheJiang,2629.16,557.32,689.73,435.69,514.66,795.87,575.76,323.36
AnHui,1844.78,430.29,271.28,126.33,250.56,513.18,314.00,151.39
FuJian,2709.46,428.11,334.12,160.77,405.14,461.67,535.13,232.29
JiangXi,1563.78,303.65,233.81,107.90,209.70,393.99,509.39,160.12
ShanDong,1675.75,613.32,550.71,219.79,272.59,599.43,371.62,211.84
HeNan,1427.65,431.79,288.55,208.14,217.00,337.76,421.31,165.32
HuNan,1942.23,512.27,401.39,206.06,321.29,697.22,492.60,226.45
HuBei,1783.43,511.88,282.84,201.01,237.60,617.74,523.52,182.52
GuangDong,3055.17,353.23,564.56,356.27,811.88,873.06,1082.82,420.81
GuangXi,2033.87,300.82,338.65,157.78,329.06,621.74,587.02,218.27
HaiNan,2057.86,186.44,202.72,171.79,329.65,477.17,312.93,279.19
ChongQing,2303.29,589.99,516.21,236.55,403.92,730.05,438.41,225.80
SiChuang,1974.28,507.76,344.79,203.21,240.24,575.10,430.36,223.46
GuiZhou,1673.82,437.75,461.61,153.32,254.66,445.59,346.11,191.48
YunNan,2194.25,537.01,369.07,249.54,290.84,561.91,407.70,330.95
XiZang,2646.61,839.70,204.44,209.11,379.30,371.04,269.59,389.33
SHanXi,1472.95,390.89,447.95,259.51,230.61,490.90,469.10,191.34
GanSu,1525.57,472.98,328.90,219.86,206.65,449.69,249.66,228.19
QingHai,1654.69,437.77,258.78,303.00,244.93,479.53,288.56,236.51
NingXia,1375.46,480.89,273.84,317.32,251.08,424.75,228.73,195.93
XinJiang,1608.82,536.05,432.46,235.82,250.28,541.30,344.85,214.40

本來資料的頭一個是中文的,但是由於中文讀取需要解碼,出了一些問題,索性改成了城市名字的拼音,每一行都是一個城市的資料

然後把city.txt 檔案儲存到路徑檔案夾下。這個檔案夾是根據編輯軟體設定的,我用的是spyder,然後建立了一個工程,就把city.txt文

件考到了工程目錄下。

之後在工程中輸入一下程式:

‘‘‘
created on Wed Jul 05 09:13:43 2017
author: GXTon
email :[email protected]
jiaotashidi qiuzhenwushi
‘‘‘
#

import numpy as np                        #要用k-means演算法,需要匯入numpy
from sklearn.cluster import KMeans #只匯入一部分,


def loadData(filePath):        #建立一個讀取資料的函數
       fr = open(filePath,‘r+‘)       #這裡是去讀
       lines = fr.readlines()  #.read()每次讀取整個檔案,通常用於將檔案內容放到一個字串變數中

                                             #.readlines()一次讀取整個檔案(類似於.resd())

                                             #.readline()每次唯讀取一行,通常比.readlines()慢得多。僅當沒有足夠記憶體時才使用它。
       retData = []  #用於儲存城市的各項消費資訊
  retCityName = []  #用於儲存城市名稱
  for line in lines:
  items = line.strip().split(",")
  retCityName.append(items[0])
  retData.append([float(items[i]) for i in range(1,len(items))])
  return retData,retCityName    #傳回值:返回城市名稱,以及該城市的各項消費資訊。


if __name__ == ‘__main__‘:     #這裡相當於主函數
   data,cityName = loadData(‘city.txt‘)   #利用loadData方法讀取資料,載入資料
   km = KMeans(n_clusters=4)             #建立執行個體,建立k-means演算法,這裡把所有分成4組;

                                                             #調用k-means方法所需參數:n_clusters,用於指定聚類中心的個數

                                                              #init,初始聚類中心的初始化方法

                                                               #max_iter,最大的迭代次數

                                                               #一般調用時只用給出n_clusters即可,init預設是k-means++,max_iter預設是300
   label = km.fit_predict(data)         #調用Kmeans()fit_predict()方法進行計算,

                                                      #作用是計算簇中心以及為為簇分配符號,label:聚類後個資料所屬的標籤。
   expenses = np.sum(km.cluster_centers_,axis=1)    #axis按行求和
#print(expenses)
   CityCluster = [[],[],[],[]]
   for i in range(len(cityName)):   #將城市按照label分成設定的簇
  CityCluster[label[i]].append(cityName[i])  #將每個簇的城市輸出
   for i in range(len(CityCluster)):
  print("Expenses:%.2f" % expenses[i])   #將每個簇的平均花費輸出
  print(CityCluster[i])

 點擊運行,便能出來結果。

其中n_clusters類,消費水平相近的城市聚集在一類中

expense:聚類中心點的數值加和,也就是平均消費水平

 

 

 

 

 

 

 

實現過程:

1、建立工程,匯入sklearn相關包

     import numpy as np

     from sklearn.cluster import KMeans

 

 

 

 

 

 

軟體——機器學習與Python,聚類,K——means

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.