学习
实践
活动
工具
TVP
写文章

无监督学习之聚类K-means算法实例

# 无监督学习: 聚类,将无标记的样本进行分类

import numpy as np

import matplotlib.pyplot as plt

from sklearn import metrics

from sklearn.cluster import KMeans

import pandas as pd

#--数据准备

import tushare as ts

data=ts.get_hist_data('601518',start='2017-010-26',end='2018-06-22',ktype='D')

datay=pd.DataFrame(columns=['滞后两天','滞后一天','当天涨跌情况'],index=range(len(data)-2))

for i in range(2,len(data)):

datay.iloc[i-2,0]=data.iloc[i-2,6]

datay.iloc[i-2,1]=data.iloc[i-1,6]

if data.iloc[i,6]>0:

datay.iloc[i-2,2]=1

else:

datay.iloc[i-2,2]=0

x=np.array(np.array(datay.iloc[:,[0,1]]).tolist())

#------------------可视化数据情况

plt.figure()

plt.scatter(x[:,0],x[:,1],marker='o',facecolors='yellow',edgecolors='k',s=20)

x_min,x_max=min(x[:,0])-1,max(x[:,0])+1

y_min,y_max=min(x[:,1])-1,max(x[:,1])+1

plt.title('Input Data')

plt.xlim(x_min,x_max)

plt.ylim(y_min,y_max)

#-----初始化一个 k-means 对象,并利用数据训练

kmeans=KMeans(init='k-means++',n_clusters=4,n_init=10)# 这里设置划分为4个类别

kmeans.fit(x)

#------ 测试出可视化边界(生成网格点坐标数据)

step_size=0.01

x_values,y_values=np.meshgrid(np.arange(x_min,x_max,step_size),np.arange(y_min,y_max,step_size))

yhat=kmeans.predict(np.c_[x_values.ravel(),y_values.ravel()])

#------ 网格数据评估了点的标记结果,画图看分布

yhat=yhat.reshape(x_values.shape)

plt.figure()

plt.clf()

plt.imshow(yhat,interpolation='nearest',extent=(x_values.min(),x_values.max(),y_values.min(),y_values.max()),cmap=plt.cm.Paired,aspect='auto',origin='lower')

plt.scatter(x[:,0],x[:,1],marker='o',facecolor='none',edgecolors='k',s=30)

得到将样本划分为4中类别的图,并且网格点数据预测分类情况如上图

#----- 四种类别的中心点画出来

cent=kmeans.cluster_centers_# 获得训练后模型四类中心点位置坐标

plt.scatter(cent[:,0],cent[:,1],marker='o',s=100,linewidths=3,color='k',zorder=10,facecolors='r')

plt.title('Centoids and boundaries obtaned using KMeans')

plt.xlim(x_min,x_max)

plt.ylim(y_min,y_max)

plt.show()

图中红色点的位置即为四中类别的 中心点位置

至此将二维平面的所有点都可以划分到四中类别中去。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180625G1NJKC00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券