sklearn KMeans在訓練集上訓練,在預測集上預測


一般在有監督訓練中,我們很自然地會用如下模式去預測測試集的分類:(以svm為例)

svm.fit(x_train, y_train)
y_pred=svm.predict(x_test)

那么無監督訓練中是否也可以在一個數據集上訓練,然后用訓練好的模型直接調用predict()函數在另一個數據集上進行預測呢?答案是:可以的!下面我們以KMeans為例說明。

import numpy as np
from sklearn.cluster import KMeans
from sklearn.datasets.samples_generator import make_blobs

# Generate some data
X_train, y_train = make_blobs(n_samples=400, centers=4, cluster_std=0.60, random_state=0)
X_test, y_test = make_blobs(n_samples=100, centers=4, cluster_std=0.80, random_state=0)

kmeans = KMeans(4, random_state=0)
kmeans.fit(X_train)

# 方法一:手動計算測試集的分類
centroids = kmeans.cluster_centers_
labels_list = []
for i in range(X_test.shape[0]):
    distance = np.square(centroids - X_test[i])
    distance = np.sum(distance, axis=1)
    label = np.argmin(distance)
    labels_list.append(label)

# 方法二:調用predict()
labels_test = kmeans.predict(X_test)

# 判斷兩個方法的預測結果是否一樣
print(labels_list == list(labels_test))   # 輸出結果:True

kmeans的predict()結果和我們手動計算的結果完全相同,說明無監督訓練中也可以在一個數據集上訓練,然后用訓練好的模型直接調用predict()函數在另一個數據集上進行預測。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM