聚类

1. 非监督学习

在大多数情况下,从现实世界获取的数据并没有标记,也就不能告诉你正确答案
因此非监督学习很重要


image.png

观察上面的图,可以认为数据中有簇或者聚类,如果我们能够辨别出这些簇或者聚类,则可能对未知的新数据点产生认识,并预测其附近数据点可能具有的特点

降维dimensionality reduction
可将二维平面降低为一维的线

在非监督学习中,数据没有标签,但能发现其结构

2. 聚类电影

image.png

3. 多少个聚类?

最基本也是目前最常用的聚类算法:
K-Means k-均值
簇中心是我们找到的来表征数据的区域


image.png

4. 将点与聚类匹配

在K-Means中,首先画出聚类中心
然后两步:

  • 分配
  • 优化

练习:
对于center 1 ,选出距离center 1 比center 2更近的红色点
解法:
在两个集群中心间画一条线,然后画出这条线的等距垂直线,该垂线把红点分成了两部分,上面是距离center 1 更近的点,下面是距离center 2更近的点


image.png

5. 优化中心(橡皮筋)

分配:
上面的四个点对应于上面的聚类中心
下面的三个点对应于下面的聚类中心

image.png

优化:
将聚类中心到这些点的总二次距离最小化,这时需要移动聚类中心,使蓝色线条的总长度最短

k-means的核心就是将聚类中心通过不断的迭代移动到正确的位置

9. K-均值聚类可视化

可在此处亲自尝试 K-均值聚类:http://www.naftaliharris.com/blog/visualizing-k-means-clustering/

11. K-均值聚类可视化 3

对于uniform points ,矩心初始放置的位置通常比较随机,但是也很重要
因此根据某一确定的初始状况,最终可以使聚类的结果看起来完全不同

12. Sklearn

确定要尝试的聚类数是使用K-means时最具挑战性的工作之一

算法过程:
选择矩心,将点分配到矩心,调整矩心(循环)

sklearn.cluster.KMeans(n_clusters=8, 
init=’k-means++’,
n_init=10,   #算法初始化的次数,即提出聚类的次数
max_iter=300, 
tol=0.0001, 
precompute_distances='auto’,
verbose=0, 
random_state=None, 
copy_x=True, 
n_jobs=1, 
algorithm=’auto’)

本课讲了以下三个参数

  • n_clusters :
    int, optional, default: 8
    The number of clusters to form as well as the number of centroids to generate.

  • n_init :
    int, default: 10
    Number of time the k-means algorithm will be run with different centroid seeds. The final results will be the best output of n_init consecutive runs in terms of inertia.

  • max_iter :
    int, default: 300
    Maximum number of iterations of the k-means algorithm for a single run.

14. K-均值的局限

对于一个固定的数据集,一个固定的簇中心,在运行k-means算法时,是否总会得到相同的结果?

K-means是所谓的爬山算法,它非常依赖于你的初始聚类中心所处的位置

15. 反直觉的聚类

根据你对k-means的了解,是否可能存在这样一种情况,即所有的数据点被分成如下图所示的两种聚类


image.png

如果你有越多的聚类中心,就能找到越多的局部最小解

17. 聚类迷你项目视频

下一课讲解特征缩放,特征缩放以某种方式对特征进行预处理,在执行特征缩放后,它实际上会改变聚类算法的输出,因此需要了解诸如特征缩放的操作的风险

18.K-均值聚类迷你项目

在此项目中,我们会将 k-均值聚类应用于安然财务数据。当然,我们最终的目标是识别相关人员;既然我们有了已标记数据,调用 k-均值聚类这种非监督式方法就不成问题。
尽管如此,在此项目中,你仍然会获得 k-均值的一些实际操作经验并尝试特征缩放,这会让你预先了解下一课的材料。

19. 聚类特征

salary
exercised_stock_options

20. 部署聚类

在 financial_features 数据上部署 k-均值聚类,并将 2 个聚类指定为参数。将聚类预测存储到名为 pred 的列表,以便脚本底部的 Draw() 命令正常工作。在弹出的散点图中,聚类是否是你预期的?

feature_1 = "salary"
feature_2 = "exercised_stock_options"
poi  = "poi"
features_list = [poi, feature_1, feature_2]
data = featureFormat(data_dict, features_list )
poi, finance_features = targetFeatureSplit( data )

for f1, f2 in finance_features:
    plt.scatter( f1, f2 )
plt.show()

from sklearn.cluster import KMeans
clf = KMeans(n_clusters=2)
pred = clf.fit_predict(finance_features)

21. 使用 3 个特征聚类

向特征列表(features_list)中添加第三个特征:“total_payments”。现在使用 3 个,而不是 2 个输入特征重新运行聚类(很明显,我们仍然可以只显示原来的 2 个维度)。将聚类绘图与使用 2 个输入特征获取的绘图进行比较。是否有任何点切换群集?多少个点?这种使用 3 个牲的新聚类无法通过肉眼加以猜测——必须通过 k-均值算法才能识别它。

(你需要更改创建散点图的代码,以便容纳 3 个特征而不是 2 个,有关操作说明,请参阅初始代码中的注释。)

当你加入一些新的特征时,有测试点移动到不同的聚类中吗?

  • □ 没有,所有聚类都没变

  • □ 是的,有4个测试点的聚类变了

  • □ 是的,有7个测试点的聚类变了

  • □ 是的,有很多测试点的聚类变了

image.png
image.png
feature_1 = "salary"
feature_2 = "exercised_stock_options"
feature_3 = "total_payments"
poi  = "poi"
features_list = [poi, feature_1, feature_2,feature_3]
data = featureFormat(data_dict, features_list )
poi, finance_features = targetFeatureSplit( data )

for f1, f2,_ in finance_features:
    plt.scatter( f1, f2 )
plt.show()

### cluster here; create predictions of the cluster labels
### for the data and store them to a list called pred

from sklearn.cluster import KMeans
clf = KMeans(n_clusters=2)
pred = clf.fit_predict(finance_features)

22. 股票期权范围

在下一课中,我们将讨论特征缩放。它是一种特征预处理,应在执行某些分类和回归任务之前执行。这里只是快速预览,概述特征缩放的功能。

本例中使用的“exercised_stock_options”特征取的最大值和最小值是什么?

(注意:如果查看 finance_features,会发现有些“NaN”值已被清理并被零值取代——因此尽管那些值可能看起来像是最小值,但却具有欺骗性,因此它们更像是你不具有其相关信息而必须填入一个数字的点。对于此问题,请返回 data_dict 并查找显示的最大值和最小值,忽略所有“NaN”条目。)

通过观察数据列表,“exercised_stock_options”的最大值和最小值分别是多少呢?(忽略“NaN”)

data_dict = pickle.load( open("../final_project/final_project_dataset.pkl", "r") )
data_dict.pop("TOTAL", 0)

def find_max_and_min_est(data_dict):
    eso_list = []
    for i in data_dict:
        stock = data_dict[i]['exercised_stock_options']
        if stock !='NaN':
            eso_list.append(stock)
    print "max_stock_options",max(eso_list)      #34348384
    print "min_stock_options",min(eso_list)    #3285

find_max_and_min_est(data_dict)

23. 薪酬范围

薪酬范围
“salary”取的最大值和最小值是什么?
(注意:与上一个测试题中的注意事项相同。如果查看 finance_features,会发现有些“NaN”值已被清理并被零值取代——因此尽管那些值可能看起来像是最小值,但却具有欺骗性,因此它们更像是你不具有其相关信息而必须填入一个数字的点。对于此问题,请返回 data_dict 并查找显示的最大值和最小值,忽略所有“NaN”条目。)

def find_max_and_min_salary(data_dict):
    salary_list = []
    for i in data_dict:
        salary = data_dict[i]['salary']
        if salary !='NaN':
            salary_list.append(salary)
    print "max_stock_salary",max(salary_list)  #1111258
    print "min_stock_salary",min(salary_list)   #477
find_max_and_min_salary(data_dict)

24. 聚类更改

旧图:


image.png

新图:


image.png

下一张幻灯片上的绘图会显示你刚刚编写的聚类代码,但在本例中,我们在执行聚类之前应用了特征缩放。

我们希望你将(下一张幻灯片上)使用缩放的聚类与在聚类算法中使用*两个特征时生成的第一个聚类可视化效果进行比较。

请注意,特征范围现在已更改为 [0.0, 1.0]。这是我们所做的唯一更改。

在下一课中,你将详细了解特征缩放的含义,但现在,只需查看对聚类产生的影响--哪个/哪些点会切换它们关联的聚类?

特征缩放化之后,哪些数据点改变了聚类?

将此绘图与迷你项目开始时获取的绘图(对只两个特征进行聚类)进行比较以回答此问题。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 230,563评论 6 544
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 99,694评论 3 429
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 178,672评论 0 383
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 63,965评论 1 318
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 72,690评论 6 413
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 56,019评论 1 329
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 44,013评论 3 449
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 43,188评论 0 290
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 49,718评论 1 336
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 41,438评论 3 360
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 43,667评论 1 374
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 39,149评论 5 365
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,845评论 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 35,252评论 0 28
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 36,590评论 1 295
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 52,384评论 3 400
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 48,635评论 2 380

推荐阅读更多精彩内容