前提你以前将要处理的数据整理好了。(指的是数据清洗,异常值检测以及处理,数据重采样等)
我这里的X是1288*7的numpy.ndarray类型。
第一步,数据归一化,用的是MinMaxScaler。
from sklearn.preprocessing import MinMaxScaler
X0=df.values#dataframe的value是numpy.ndarray类型
scaler = MinMaxScaler(feature_range=(0,1))#这里的feature_range填的是想变换后区间
X = scaler.fit_transform(X0)
第二步,建立高斯聚类模型并训练
from sklearn.mixture import GaussianMixture
model = GaussianMixture(n_components = 2)
model.fit(X)
yhat = model.predict(X)
yhat就是训练之后的一位数组,每一个数据是之前每一行数据对应的类别0,1,2···n(n是你聚类的个数)
第三步,利用tsne可视化
from sklearn import manifold
import numpy as np
from numpy import unique
from numpy import where
clusters = unique(yhat)
ax1=plt.figure().add_subplot(211,projection='3d')
ax2=plt.figure().add_subplot(211)
method1 = manifold.TSNE(n_components=3, init='pca',
random_state=0)
method2 = manifold.TSNE(n_components=2, init='pca',
random_state=0)
Y1 = method1.fit_transform(X)
Y2 = method2.fit_transform(X)
for cluster in clusters:
row_ix = where(yhat == cluster)
ax1.scatter(Y1[row_ix, 0],Y1[row_ix, 1],Y1[row_ix,2])
ax2.scatter(Y2[row_ix, 0],Y2[row_ix, 1])
plt.show()
这是最后的效果图,为了比较效果画了三维和二维图。