小珞珞 2016-11-26 5728浏览量
前文推荐:
【Python数据挖掘课程】一.安装Python及爬虫入门介绍
【Python数据挖掘课程】二.Kmeans聚类数据分析及Anaconda介绍
【Python数据挖掘课程】三.Kmeans聚类代码实现、作业及优化
【Python数据挖掘课程】四.决策树DTC数据分析及鸢尾数据集分析
【Python数据挖掘课程】五.线性回归知识及预测糖尿病实例
【Python数据挖掘课程】六.Numpy、Pandas和Matplotlib包基础知识
希望这篇文章对你有所帮助,尤其是刚刚接触数据挖掘以及大数据的同学,这些基础知识真的非常重要。如果文章中存在不足或错误的地方,还请海涵~
总结PCA步骤如下图所示:
from sklearn.decomposition import PCA调用函数如下,其中n_components=2表示降低为2维。
pca = PCA(n_components=2)例如下面代码进行PCA降维操作:
import numpy as np from sklearn.decomposition import PCA X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]]) pca = PCA(n_components=2) print pca pca.fit(X) print(pca.explained_variance_ratio_)输出结果如下所示:
PCA(copy=True, n_components=2, whiten=False) [ 0.99244291 0.00755711]再如载入boston数据集,总共10个特征,降维成两个特征:
#载入数据集 from sklearn.datasets import load_boston d = load_boston() x = d.data y = d.target print x[:10] print u'形状:', x.shape #降维 import numpy as np from sklearn.decomposition import PCA pca = PCA(n_components=2) newData = pca.fit_transform(x) print u'降维后数据:' print newData[:4] print u'形状:', newData.shape输出结果如下所示,降低为2维数据。
[[ 6.32000000e-03 1.80000000e+01 2.31000000e+00 0.00000000e+00 5.38000000e-01 6.57500000e+00 6.52000000e+01 4.09000000e+00 1.00000000e+00 2.96000000e+02 1.53000000e+01 3.96900000e+02 4.98000000e+00] [ 2.73100000e-02 0.00000000e+00 7.07000000e+00 0.00000000e+00 4.69000000e-01 6.42100000e+00 7.89000000e+01 4.96710000e+00 2.00000000e+00 2.42000000e+02 1.78000000e+01 3.96900000e+02 9.14000000e+00] [ 2.72900000e-02 0.00000000e+00 7.07000000e+00 0.00000000e+00 4.69000000e-01 7.18500000e+00 6.11000000e+01 4.96710000e+00 2.00000000e+00 2.42000000e+02 1.78000000e+01 3.92830000e+02 4.03000000e+00] [ 3.23700000e-02 0.00000000e+00 2.18000000e+00 0.00000000e+00 4.58000000e-01 6.99800000e+00 4.58000000e+01 6.06220000e+00 3.00000000e+00 2.22000000e+02 1.87000000e+01 3.94630000e+02 2.94000000e+00]] 形状: (506L, 13L) 降维后数据: [[-119.81821283 5.56072403] [-168.88993091 -10.11419701] [-169.31150637 -14.07855395] [-190.2305986 -18.29993274]] 形状: (506L, 2L)推荐大家阅读官方的文档,里面的内容可以学习,例如Iris鸢尾花降维。
绘制多子图
Matplotlib 里的常用类的包含关系为 Figure -> Axes -> (Line2D, Text, etc.)。一个Figure对象可以包含多个子图(Axes),在matplotlib中用Axes对象表示一个绘图区域,可以理解为子图。可以使用subplot()快速绘制包含多个子图的图表,它的调用形式如下:
subplot(numRows, numCols, plotNum)
subplot将整个绘图区域等分为numRows行* numCols列个子区域,然后按照从左到右,从上到下的顺序对每个子区域进行编号,左上的子区域的编号为1。如果numRows,numCols和plotNum这三个数都小于10的话,可以把它们缩写为一个整数,例如subplot(323)和subplot(3,2,3)是相同的。subplot在plotNum指定的区域中创建一个轴对象。如果新创建的轴和之前创建的轴重叠的话,之前的轴将被删除。
当前的图表和子图可以使用gcf()和gca()获得,它们分别是“Get Current Figure”和“Get Current Axis”的开头字母缩写。gcf()获得的是表示图表的Figure对象,而gca()则获得的是表示子图的Axes对象。下面我们在Python中运行程序,然后调用gcf()和gca()查看当前的Figure和Axes对象。
import numpy as np import matplotlib.pyplot as plt plt.figure(1) # 创建图表1 plt.figure(2) # 创建图表2 ax1 = plt.subplot(211) # 在图表2中创建子图1 ax2 = plt.subplot(212) # 在图表2中创建子图2 x = np.linspace(0, 3, 100) for i in xrange(5): plt.figure(1) # 选择图表1 plt.plot(x, np.exp(i*x/3)) plt.sca(ax1) # 选择图表2的子图1 plt.plot(x, np.sin(i*x)) plt.sca(ax2) # 选择图表2的子图2 plt.plot(x, np.cos(i*x)) plt.show()输出如下图所示:
# -*- coding: utf-8 -*- #糖尿病数据集 from sklearn.datasets import load_diabetes data = load_diabetes() x = data.data print x[:4] y = data.target print y[:4] #KMeans聚类算法 from sklearn.cluster import KMeans #训练 clf = KMeans(n_clusters=2) print clf clf.fit(x) #预测 pre = clf.predict(x) print pre[:10] #使用PCA降维操作 from sklearn.decomposition import PCA pca = PCA(n_components=2) newData = pca.fit_transform(x) print newData[:4] L1 = [n[0] for n in newData] L2 = [n[1] for n in newData] #绘图 import numpy as np import matplotlib.pyplot as plt #用来正常显示中文标签 plt.rc('font', family='SimHei', size=8) #plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示负号 plt.rcParams['axes.unicode_minus']=False p1 = plt.subplot(221) plt.title(u"Kmeans聚类 n=2") plt.scatter(L1,L2,c=pre,marker="s") plt.sca(p1) ################################### # 聚类 类蔟数=3 clf = KMeans(n_clusters=3) clf.fit(x) pre = clf.predict(x) p2 = plt.subplot(222) plt.title("Kmeans n=3") plt.scatter(L1,L2,c=pre,marker="s") plt.sca(p2) ################################### # 聚类 类蔟数=4 clf = KMeans(n_clusters=4) clf.fit(x) pre = clf.predict(x) p3 = plt.subplot(223) plt.title("Kmeans n=4") plt.scatter(L1,L2,c=pre,marker="+") plt.sca(p3) ################################### # 聚类 类蔟数=5 clf = KMeans(n_clusters=5) clf.fit(x) pre = clf.predict(x) p4 = plt.subplot(224) plt.title("Kmeans n=5") plt.scatter(L1,L2,c=pre,marker="+") plt.sca(p4) #保存图片本地 plt.savefig('power.png', dpi=300) plt.show()
输出结果如下图所示,感觉非常棒,这有利于做实验对比。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
大数据计算实践乐园,近距离学习前沿技术