机器学习 无监督学习
建模过程:一个模型参数的调整过程。即:给模型输入x后,输出尽可能逼近已知目标y。
在回归模型、贝叶斯模型、决策树模型中,建模阶段都是调用fit函数,传递两个参数x:用来做预测的特征;y:已知的目标。
回归模型:RMSE、对数类似函数
决策树:基尼系数
贝叶斯模型:用已知目标的数据来提供似然性
这些方法都必须给出已知的Y,否则模型就无法建立。对于这一类方法有一个专门的名称叫有监督学习。

有监督学习

x:变量或独立变量、特征、输入等等;
Y:响应、目标、标签、依赖变量、输出等等;
真正工作时:调用predict函数。
对未知响应的新数据来进行回归或分类。
实质:通过对训练数据的分析,建立一种从输人特征到输出响应的联系。
【例】客户是否有支票账户、目前欠款金额,性别和婚姻状况,可以知道他是否是高风险客户。

有监督模型

☆模型本身
☆准确的标签
劣势:标签数据的缺乏,成为该类模型的瓶颈。

无监督模型

无监督学习模型的建模过程中,并不需要给出目标或响应,而是完全根据输入特征,来找出相似的数据。
如:聚类 数据被分为几簇
评价标准:依靠数据科学家结合专业领域知识后的理解与解释。

应用场合

没有明显响应变量(不明确要预测什么)
从无明显模式的数据中寻找模式(特征提取)

无监督模型——K-means模型

聚类任务的无监督学习模型。
簇( cluster ):一组相似的数据。
image.png
若有n个特征,可构造出n维特征空间。每个样本数据都是空间中以其具体特征为坐标的点。
相似性衡量——点与点在特征空间中的距离

  1. import numpy as np
  2. import pandas as pd
  3. import random
  4. from scipy import stats
  5. from matplotlib import pyplot as plt
  6. x1=[]
  7. x2=[]
  8. y1=[]
  9. y2=[]
  10. for n in range(40):
  11. x1.append(random.gauss(-1,0.25))
  12. x2.append(random.gauss(-1,0.25))
  13. y1.append(random.gauss(1,0.25))
  14. y2.append(random.gauss(1,0.25))
  15. plt.figure(figsize=(8,6))
  16. plt.plot(x1,y1,'og')
  17. plt.plot(x1,x2,'og')
  18. plt.plot(y1,x1,'og')
  19. plt.plot(y1,y2,'og')
  20. plt.xlim([-2.5,2.5])
  21. plt.ylim([-2.5,2.5])
  22. plt.savefig('cluster')

image.png
图中的数据,也就是点形成了四个不同的簇,每个簇中的点虽相同却又不靠近。那么每个簇由谁来代表呢,由此引出簇中心的概念:簇中所有点的平均。

  1. plt.figure(figsize=(8,6))
  2. plt.plot(x1,y1,'og')
  3. plt.plot(x1,x2,'og')
  4. plt.plot(y1,x1,'og')
  5. plt.plot(y1,y2,'og')
  6. plt.xlim([-2.5,2.5])
  7. plt.ylim([-2.5,2.5])
  8. plt.plot(np.mean(x1),np.mean(y1),'*r',markersize=15)
  9. plt.plot(np.mean(x1),np.mean(x2),'*r',markersize=15)
  10. plt.plot(np.mean(y1),np.mean(x1),'*r',markersize=15)
  11. plt.plot(np.mean(y1),np.mean(y2),'*r',markersize=15)
  12. plt.savefig('cluster2')

image.png

K-means模型的迭代算法

第1步:选择k个初始的簇中心点;
第2步:遍历所有的点,把每个点分配到离它最近的那个簇;
第3步:重新计算簇中心;
第4步:重复前面的第2和第3步,直到达到停止准则。
Scikit-learn库中有现成的K-means对象可以实现K-means聚类
以一个电影数据为示例

  1. my_data=pd.read_csv('C:\Python\Scripts\my_data\\tmdb_5000_movies.csv')
  2. my_data.describe()
  3. from sklearn.cluster import KMeans
  4. # 以'budget','popularity','revenue'三个特征来作为聚类分析的特征
  5. X=my_data[['budget','popularity','revenue']]
  6. km=KMeans(n_clusters=3,random_state=1)
  7. # 这次的fit函数只传了一个参数
  8. km.fit(X)
  9. my_cl=pd.DataFrame(data=km.labels_,columns=['cluster'])
  10. X=pd.concat([X,my_cl],axis=1)
  11. X.head(5)

image.png

  1. # 对聚类得到的结果进行分组统计
  2. X.groupby('cluster').mean()

image.png

图形化展示聚类的结果

  1. x=X['budget']
  2. y=X['popularity']
  3. z=X['revenue']
  4. colors=list()
  5. palette={0:"red",1:"green",2:"blue"}
  6. # 字典,给三种类别对应散点图中的三种 marker_color
  7. for n,row in enumerate(X['cluster']): # 根据类别为每个样本设置绘图颜色
  8. colors.append(palette[X['cluster'][n]])#
  9. fig = plt.figure(figsize=(12,10))
  10. ax = fig.gca(projection='3d')
  11. ax.scatter(x,y,z,color=colors)
  12. ax.set_xlim(0,2e8)
  13. ax.set_zlim(0,1e9)
  14. ax.set_xlabel('budget',size=15)
  15. ax.set_ylabel('popularity',size=15)
  16. ax.set_zlabel('revenue',size=15)
  17. fig.savefig('cluster3')

image.png
可以看到不同类别占据特征空间中的不同位置。