【python】调用sklearn使用k-means模型

from sklearn.cluster import KMeans
from sklearn.decomposition import PCA
import pandas as pd
import numpy as np
import matplotlib as mpl
#iOS系统
mpl.use('TkAgg')
import matplotlib.pyplot as plt
from sklearn.preprocessing import Imputer  # 导入sklearn.preprocessing中的Imputer库
 
#聚类数据
df=pd.read_csv('overdue (5).csv', header=None,encoding='utf-8',sep='\t')

#去掉第一列(index)
df2 = df.drop(df.columns[0], axis=1)

#归一化处理
#df3=(df2 - df2.min()) / (df2.max() - df2.min())
df1 = df2.fillna(df2.mean()) # 用平均数代替,选择各自列的均值替换缺失值

#K-means聚类
kmeans = KMeans(n_clusters=5, random_state=10).fit(df1)
df1['jllable']=kmeans.labels_
df_count_type=df1.groupby('jllable').apply(np.size)

##各个类别的数目
print(df_count_type)
##聚类中心
print(kmeans.cluster_centers_)
##新的dataframe,命名为new_df ,并输出到本地,命名为new_df.csv。
new_df=df1[:]
new_df
new_df.to_csv('new_df.csv')
 
##将用于聚类的数据的特征的维度降至2维,并输出降维后的数据,形成一个dataframe名字new_pca
pca = PCA(n_components=2)
new_pca = pd.DataFrame(pca.fit_transform(new_df))
 
##可视化
d = new_pca[new_df['jllable'] == 0]
plt.plot(d[0], d[1], 'r.')
d = new_pca[new_df['jllable'] == 1]
plt.plot(d[0], d[1], 'go')
d = new_pca[new_df['jllable'] == 2]
plt.plot(d[0], d[1], 'b*')
plt.gcf().savefig('kmeans.png')
plt.show()

#以下为预测
df_y=pd.read_csv('overdue (6).csv', header=None,encoding='utf-8',sep='\t')

#处理数据的方式与上面相同
#去掉第一列(index列)
df2_y = df_y.drop(df_y.columns[0], axis=1)
#处理空值
df1_y = df2_y.fillna(df2_y.mean())
df1_y = df1_y.fillna(1)
#预测
df_y['ls'] = kmeans.predict(df1_y)  # 预测聚类模型
new_df_y=df_y[:]
#输出
new_df_y.to_csv('new_df_y.csv')

 

你可能感兴趣的:(python)