sklearn建模及評估(聚類)

kuqlan發表於2019-09-03

      作為機器學習工具的 sklearn ,它主要作用是構建模型和評估。其主要的模型分為聚類、分類、迴歸等,而沒有模型也有適應不同場景的多個演算法。接下來我們從這幾點進行簡要總結。

1、聚類模型

      聚類的輸入是一組未被標記(所謂 target 值或 lable )的樣本,聚類根據資料自身的距離或相似度將它們劃分為若干組。劃分的原則是組內(內部)距離最小化,而組間(外部)距離最大化。

      聚類演算法的實現需要 sklearn 的估計器( Estimator ),估計其擁有 fit predict 兩個方法。以 iris 資料為例,使用 sklearn 估計器狗構建 K-Means 聚類模型,其實力如下程式碼所示:

 

1.1 構建聚類模型程式碼

from sklearn.datasets import load_iris

from sklearn.preprocessing import MinMaxScaler

from sklearn.cluster import KMeans

iris = load_iris()

iris_data = iris['data'] ##提取資料集中的特徵

iris_target = iris['target'] ## 提取資料集中的標籤

iris_names = iris['feature_names'] ### 提取特徵名

scale = MinMaxScaler().fit(iris_data)## 訓練規則

iris_dataScale = scale.transform(iris_data) ## 應用規則

kmeans = KMeans(n_clusters = 3,

    random_state=123).fit(iris_dataScale) ##構建並訓練模型

print('構建的K-Means模型為:\n',kmeans)

 

result = kmeans.predict([[1.5,1.5,1.5,1.5]])

print('花瓣花萼長度寬度全為1.5的鳶尾花預測類別為:', result[0])

 

1.2 聚類結果視覺化

import pandas as pd

from sklearn.manifold import TSNE

import matplotlib.pyplot as plt

##使用TSNE進行資料降維,降成兩維

tsne = TSNE(n_components=2,init='random',

    random_state=177).fit(iris_data)

df=pd.DataFrame(tsne.embedding_) ##將原始資料轉換為DataFrame

df['labels'] = kmeans.labels_ ##將聚類結果儲存進df資料表

##提取不同標籤的資料

df1 = df[df['labels']==0]

df2 = df[df['labels']==1]

df3 = df[df['labels']==2]

## 繪製圖形

fig = plt.figure(figsize=(9,6)) ##設定空白畫布,並制定大小

##用不同的顏色表示不同資料

plt.plot(df1[0],df1[1],'bo',df2[0],df2[1],'r*',

    df3[0],df3[1],'gD')

plt.savefig('C:/Users/yspmm/spydertest/聚類結果2.png')

plt.show() ##顯示圖片

 

1.3 使用FMI評價聚類模型

sklearn的metrics模組提供提供了聚類模型評價指標。為什麼要評價,目的在於模型時候達到預期效果。

from sklearn.metrics import fowlkes_mallows_score

for i in range(2,7):

    ##構建並訓練模型

    kmeans = KMeans(n_clusters = i,random_state=123).fit(iris_data)

    score = fowlkes_mallows_score(iris_target,kmeans.labels_)

    print('iris資料聚%d類FMI評價分值為:%f' %(i,score))

 

參考書:

Python資料分析與應用  黃紅梅、張良均  主編    中國工信出版集團和人民郵電出版社

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/18841027/viewspace-2655875/,如需轉載,請註明出處,否則將追究法律責任。

相關文章