python 使用K-Means演算法對資料進行聚類
阿新 • • 發佈:2019-01-10
K-Means是聚類演算法的一種,以距離來判斷資料點間的相似度並對資料進行聚類。前面的文章中我們介紹過K-Means聚類演算法的原理及實現。本篇文章使用scikit-learn庫對資料進行聚類分析。
準備工作
開始之前先匯入要使用的各種庫檔案,首先是scikit-learn庫,然後是數值計算numpy和科學計算pandas庫,以及用於繪製圖表的matplotlib庫檔案。
1234 | from sklearn.cluster import KMeans import numpy as np import pandas as pd import matplotlib.pyplot as plt |
讀取並檢視資料表
讀取用於聚類的資料並建立名為loan_data的資料表,用於後續的聚類分析。
12 | #讀取用於聚類的資料,並建立資料表 loan_data = pd.DataFrame(pd.read_csv( 'loan_data.csv' ,header = 0 )) |
12 | #檢視資料表 loan_data.head() |
12345 | #查看錶中的各列的名稱 loan_data.columns Index([ 'member_id' , 'loan_amnt' , 'term' , 'grade' , 'emp_length' , 'annual_inc' , 'issue_d' , 'loan_status' , 'total_pymnt_inv' , 'total_rec_int' ], dtype = 'object' ) |
我們對資料表中的貸款金額和使用者年收入進行聚類,這裡先繪製兩個維度的散點圖,觀察分佈情況並與後續的聚類結果進行對比。
12345678 | #繪製散點圖 plt.rc( 'font' , family = 'STXihei' , size = 10 ) plt.scatter(loan_data[ 'loan_amnt' ],loan_data[ 'annual_inc' ], 50 ,color = 'blue' ,marker = '+' ,linewidth = 2 ,alpha = 0.8 ) plt.xlabel( '貸款金額' ) plt.ylabel( '年收入' ) plt.xlim( 0 , 25000 ) plt.grid(color = '#95a5a6' ,linestyle = '--' , linewidth = 1 ,axis = 'both' ,alpha = 0.4 ) plt.show() |
K-Means聚類
我們資料表中的貸款金額和使用者年收入兩個維度進行聚類,這裡先對資料進行預處理,然後設定類別數量。
123456 | #設定要進行聚類的欄位 loan = np.array(loan_data[[ 'loan_amnt' , 'annual_inc' ]]) #設定類別為3 clf = KMeans(n_clusters = 3 ) #將資料代入到聚類模型中 clf = clf.fit(loan) |