http://blog.csdn.net/eastmount/article/category/6423551
#2018-03-21 11:08:20 March Wednesday the 12 week, the 080 day SZ SSMR
数据分析课程笔记
第一章
Python安装
第二章
Kmeans聚类数据分析及Anaconda介绍
主要内容包括:
1.Anaconda软件的安装过程及简单配置
2.聚类及Kmeans算法介绍
3.案例分析:Kmeans实现运动员位置聚集
Anacaonda软件来讲解,它集成了各种Python的第三方包,尤其包括数据挖掘和数据分析常用的几个包。
下载地址:https://www.continuum.io/downloads/
云盘分享:http://pan.baidu.com/s/1hrEQ9xi
2. 机器学习常用包
Scikit-Learn
Scikit-Learn是一个基于python的用于数据挖掘和数据分析的简单且有效的工具,它的基本功能主要被分为六个部分:分类(Classification)、回归(Regression)、聚类(Clustering)、数据降维(Dimensionality Reduction)、模型选择(Model Selection)、数据预处理(Preprocessing)。
NumPy
NumPy(Numeric Python)系统是Python的一种开源的数值计算扩展,一个用python实现的科学计算包。它提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。
SciPy
SciPy (pronounced "Sigh Pie") 是一个开源的数学、科学和工程计算包。它是一款方便、易于使用、专为科学和工程设计的Python工具包,包括统计、优化、整合、线性代数模块、傅里叶变换、信号和图像处理、常微分方程求解器等等。
Matplotlib
Matplotlib是一个Python的图形框架,类似于MATLAB和R语言。它是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图。而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中。
二. 聚类及Kmeans介绍
作者拿了一张图来解释,很明白,就是人类通过各种事情总结经验,然后碰到新的类似问题上去,直接套用经验,就可以高效的解决问题。
计算机也是这样,先给大量数据训练计算机,得出一个模型,碰到新的数据,直接喂给模型,然后得出一个结论,拿来直接使用就行。
1. 分类与聚类
聚类:具有共同特征的东西聚集在一起。比如有几千篇文章,把他们按照相同,类似主题归类,就会得到一张图表,直观的看看哪种文章内容多。
而分类通过标签来训练得到一个模型,对新数据集进行预测的过程,其数据存在标签的。
K-Means算法:
该部分转载简书-程sir的文章:聚类、K-Means、例子、细节
K-Means是聚类算法中的最常用的一种,算法最大的特点是简单,好理解,运算速度快,但是只能应用于连续型的数据,并且一定要在聚类前需要手工指定要分成几类。
下面,我们描述一下K-means算法的过程,为了尽量不用数学符号,所以描述的不是很严谨,大概就是这个意思,“物以类聚、人以群分”:
1、首先输入k的值,即我们希望将数据集经过聚类得到k个分组。
2、从数据集中随机选择k个数据点作为初始大哥(质心,Centroid)
3、对集合中每一个小弟,计算与每一个大哥的距离(距离的含义后面会讲),离哪个大哥距离近,就跟定哪个大哥。
4、这时每一个大哥手下都聚集了一票小弟,这时候召开人民代表大会,每一群选出新的大哥(其实是通过算法选出新的质心)。
5、如果新大哥和老大哥之间的距离小于某一个设置的阈值(表示重新计算的质心的位置变化不大,趋于稳定,或者说收敛),可以认为我们进行的聚类已经达到期望的结果,算法终止。
6、如果新大哥和老大哥距离变化很大,需要迭代3~5步骤。
三. 案例分析:Kmeans聚类运动员数据
1. 数据集
现在存在下面的数据集,是篮球球员比赛的数据。
数据集地址:KEEL-dataset - Basketball data set
特征描述:共5个特征,每分钟助攻数、运动员身高、运动员出场时间、运动员年龄和每分钟得分数。
需求:现在需要通过运动员的数据,判断他是什么位置。
2. 代码
这里我仅仅使用两列数据,助攻数和得分数进行实验,相当于20*2的矩阵,其中输出y_pred结果表示聚类的类标。类簇数设置为3,类标位0、1、2,它也是与20个球员数据一一对应的。
Sklearn机器学习包中导入了KMeans聚类,同时需要注意Matplotlib包绘制图形的过程。代码如下,并包括详细注释:
"""
第一部分:导入包
从sklearn.cluster机器学习聚类包中导入KMeans聚类
"""
# coding=utf-8
from sklearn.cluster import Birch
from sklearn.cluster import KMeans
"""
第二部分:数据集
X表示二维矩阵数据,篮球运动员比赛数据
总共20行,每行两列数据
第一列表示球员每分钟助攻数:assists_per_minute
第二列表示球员每分钟得分数:points_per_minute
"""
X = [[0.0888, 0.5885],
[0.1399, 0.8291],
[0.0747, 0.4974],
[0.0983, 0.5772],
[0.1276, 0.5703],
[0.1671, 0.5835],
[0.1906, 0.5276],
[0.1061, 0.5523],
[0.2446, 0.4007],
[0.1670, 0.4770],
[0.2485, 0.4313],
[0.1227, 0.4909],
[0.1240, 0.5668],
[0.1461, 0.5113],
[0.2315, 0.3788],
[0.0494, 0.5590],
[0.1107, 0.4799],
[0.2521, 0.5735],
[0.1007, 0.6318],
[0.1067, 0.4326],
[0.1956, 0.4280]
]
#输出数据集
print("X content is: \n",X,'\n')
"""
第三部分:KMeans聚类
clf = KMeans(n_clusters=3) 表示类簇数为3,聚成3类数据,clf即赋值为KMeans
y_pred = clf.fit_predict(X) 载入数据集X,并且将聚类的结果赋值给y_pred
"""
clf = KMeans(n_clusters=3)
y_pred = clf.fit_predict(X)
#输出完整Kmeans函数,包括很多省略参数
print("KMeans function is:\n",clf,'\n')
#输出聚类预测结果,20行数据,每个y_pred对应X一行或一个球员,聚成3类,类标为0、1、2
print("predict result is: \n",y_pred,'\n')
"""
第四部分:可视化绘图
Python导入Matplotlib包,专门用于绘图
import matplotlib.pyplot as plt 此处as相当于重命名,plt用于显示图像
"""
import numpy as np
import matplotlib.pyplot as plt
#获取第一列和第二列数据 使用for循环获取 n[0]表示X第一列
x = [n[0] for n in X]
print("the first list of X is:\n",x,'\n')
y = [n[1] for n in X]
print("the second list of X is:\n",y,'\n')
#绘制散点图 参数:x横轴 y纵轴 c=y_pred聚类预测结果 marker类型 o表示圆点 *表示星型 x表示点
plt.scatter(x, y, c=y_pred, marker='o')
#绘制标题
plt.title("Kmeans-Basketball Data")
#绘制x轴和y轴坐标
plt.xlabel("assists_per_minute")
plt.ylabel("points_per_minute")
#设置右上角图例
plt.legend(["A","B","C"])
#显示图形
plt.show()
X content is:
[[0.0888, 0.5885], [0.1399, 0.8291], [0.0747, 0.4974], [0.0983, 0.5772], [0.1276, 0.5703], [0.1671, 0.5835], [0.1906, 0.5276], [0.1061, 0.5523], [0.2446, 0.4007], [0.167, 0.477], [0.2485, 0.4313], [0.1227, 0.4909], [0.124, 0.5668], [0.1461, 0.5113], [0.2315, 0.3788], [0.0494, 0.559], [0.1107, 0.4799], [0.2521, 0.5735], [0.1007, 0.6318], [0.1067, 0.4326], [0.1956, 0.428]]
KMeans function is:
KMeans(algorithm='auto', copy_x=True, init='k-means++', max_iter=300,
n_clusters=3, n_init=10, n_jobs=1, precompute_distances='auto',
random_state=None, tol=0.0001, verbose=0)
predict result is:
[2 0 2 2 2 2 2 2 1 1 1 2 2 2 1 2 2 2 2 1 1]
the first list of X is:
[0.0888, 0.1399, 0.0747, 0.0983, 0.1276, 0.1671, 0.1906, 0.1061, 0.2446, 0.167, 0.2485, 0.1227, 0.124, 0.1461, 0.2315, 0.0494, 0.1107, 0.2521, 0.1007, 0.1067, 0.1956]
the second list of X is:
[0.5885, 0.8291, 0.4974, 0.5772, 0.5703, 0.5835, 0.5276, 0.5523, 0.4007, 0.477, 0.4313, 0.4909, 0.5668, 0.5113, 0.3788, 0.559, 0.4799, 0.5735, 0.6318, 0.4326, 0.428]
运行效果如下: