Geo*_*eRF 2 python cluster-analysis k-means scikit-learn text-classification
我使用下面的代码通过 Scikit learn 创建 k-means 集群。
kmean = KMeans(n_clusters=nclusters,n_jobs=-1,random_state=2376,max_iter=1000,n_init=1000,algorithm='full',init='k-means++')
kmean_fit = kmean.fit(clus_data)
Run Code Online (Sandbox Code Playgroud)
我还使用保存了质心kmean_fit.cluster_centers_
然后我腌制了 K 均值对象。
filename = pickle_path+'\\'+'_kmean_fit.sav'
pickle.dump(kmean_fit, open(filename, 'wb'))
Run Code Online (Sandbox Code Playgroud)
这样我就可以加载相同的 kmeans pickle 对象并在新数据出现时将其应用到新数据中,使用kmean_fit.predict().
问题 :
加载 kmeans pickle 对象并应用的方法是否
kmean_fit.predict()允许我根据现有集群的质心将新观察值分配给现有集群?这种方法是否只是从头开始对新数据进行重新聚类?
如果此方法不起作用,鉴于我已经使用高效的 python 代码保存了集群质心,如何将新观察值分配给现有集群?
PS:我知道使用现有集群作为因变量构建分类器是另一种方法,但由于时间紧迫,我不想这样做。
是的。对象是否sklearn.cluster.KMeans被腌制(如果您正确地取消腌制,您将处理“相同”的原始对象)并不影响您可以使用该predict方法来聚类新的观察。
一个例子:
from sklearn.cluster import KMeans
from sklearn.externals import joblib
model = KMeans(n_clusters = 2, random_state = 100)
X = [[0,0,1,0], [1,0,0,1], [0,0,0,1],[1,1,1,0],[0,0,0,0]]
model.fit(X)
Run Code Online (Sandbox Code Playgroud)
出去:
KMeans(copy_x=True, init='k-means++', max_iter=300, n_clusters=2, n_init=10,
n_jobs=1, precompute_distances='auto', random_state=100, tol=0.0001,
verbose=0)
Run Code Online (Sandbox Code Playgroud)
继续:
joblib.dump(model, 'model.pkl')
model_loaded = joblib.load('model.pkl')
model_loaded
Run Code Online (Sandbox Code Playgroud)
出去:
KMeans(copy_x=True, init='k-means++', max_iter=300, n_clusters=2, n_init=10,
n_jobs=1, precompute_distances='auto', random_state=100, tol=0.0001,
verbose=0)
Run Code Online (Sandbox Code Playgroud)
看看和对象之间的n_clusters和random_state参数是如何相同的?你可以走了。modelmodel_new
使用“新”模型进行预测:
model_loaded.predict([0,0,0,0])
Out[64]: array([0])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9208 次 |
| 最近记录: |