赵走x博客
网站访问量:151935
首页
书籍
软件
工具
古诗词
搜索
登录
深入浅出Python机器学习:31、自动特征选择
深入浅出Python机器学习:30、数据“升维”
深入浅出Python机器学习:29、数据表达
深入浅出Python机器学习:28、聚类算法
深入浅出Python机器学习:27、特征提取
深入浅出Python机器学习:26、数据降维
深入浅出Python机器学习:25、数据预处理
深入浅出Python机器学习:24、神经网络实例一一手写识别
深入浅出Python机器学习:23、神经网络的原理及使用
深入浅出Python机器学习:22、神经网络的前世今生
深入浅出Python机器学习:21、SVM 实例一一波士顿房价回归分析
深入浅出Python机器学习:20、SVM 的核函数与参数选择
深入浅出Python机器学习:19、支持向量机SVM 基本概念
深入浅出Python机器学习:18、随机森林实例一一要不要和中目亲对象进一步发展
深入浅出Python机器学习:17、随机森林
深入浅出Python机器学习:16、决策树
深入浅出Python机器学习:15、朴素贝叶斯实战一一判断肿瘤是良性还是恶性
深入浅出Python机器学习:14、朴素贝叶斯算法的不同方法
深入浅出Python机器学习:13、朴素贝叶斯基本概念
深入浅出Python机器学习:12、使用L1 正则化的线性模型一一套索回归
深入浅出Python机器学习:11、使用L2 正则化的线性模型一一岭回归
深入浅出Python机器学习:10、最基本的线性模型一一线性回归
深入浅出Python机器学习:9、线性模型的墓本概念
深入浅出Python机器学习:8、K 最近邻算法项目实战一一酒的分类
深入浅出Python机器学习:7、K最近邻算法用于回归分析
深入浅出Python机器学习:6、K最近邻算法处理多元分类任务
深入浅出Python机器学习:5、k最近邻算法在分类任务中的应用
深入浅出Python机器学习:4、K 最近邻算法的原理
深入浅出Python机器学习:3、一些必需库的安装及功能简介
深入浅出Python机器学习:2、基于python i吾言的环境配置
深入浅出Python机器学习:1、概述
人脸数据集加载faces = fetch_lfw_people()报错
31、直方图
74、插件开发:Android端API实现
Python3之socket编程--3:基于UDP的套接字
15、使用 jQuery 处理 Ajax 请求
深入浅出Python机器学习:26、数据降维
资源编号:75924
人工智能
深入浅出Python机器学习
热度:106
在经过了前面若干章节的阅读之后,不知道读者朋友们会不会有这样一个疑问: 在我们的数据集中,样本往往会有很多特征,那么这些特征都是同样重要的吗? 是否有一些关键的特征对预测结果起着决定性的作用呢?
在经过了前面若干章节的阅读之后,不知道读者朋友们会不会有这样一个疑问: 在我们的数据集中,样本往往会有很多特征,那么这些特征都是同样重要的吗? 是否有一些关键的特征对预测结果起着决定性的作用呢? # 1、PCA主成分分析原理 这是一个非常好的问题。举个例子,假如小C 想要买一辆车以便节假日可以带女朋友小I 出去郊游,但是现在市场上的汽车品牌和型号都数目繁多,究竟该如何选择呢? 还有一点要考虑的是小I 得喜欢这辆车才行啊! 当然每个型号的汽车都有诸多特征,这里假设我们在预算范围限定的前提下,只看两个特征: 一个是动力;另一个是外观。然后小C 把一些车辆的特征做成数据集,井且拿给小I 看,有些车是小I 喜欢的( 用笑脸表示〉,有些是小I 不喜欢的(用哭脸表示),我们可以画一个如图9-9 所示的图形。 严禁网络传播本P D F ,违者责任自负!  图9-9 汽车的外观和动力对小I 喜好的影响 从图9-9 中,我们可以直观地看出汽车外观对小I 的喜好影响比较大,而性能则影 响相对较小。这样我们可以在图中添加一点标注,如图9 - 10 所示。  图9-10 对数据点添加主成分标注 在图9 -10 中,我们把数据点分布最“长”的方向标注为“成分1 ”,而与之成90 。角的方向标注为“成分2 ” 。那假如现在,我们让“成分2 ”取值都为0,而把“成分1”作为横坐标,重新画这个图,会变成什么样子呢?如图9-11 所示。  图9-11 去掉成分2 后的数据集 从图9- 11 中我们看出, 经过这样的处理之后,数据集从一个散点组成的面变成了一条直线, 也就是从二维变成了一维。这就是数据降维的意思,而这里我们用到的方法,称为主成分分析法( Principal Component Analysis, P~A ) 。当然,为了便于展示,我们这里用了一个二维数据降到一维的例子,而在现实世界的数据分析当中,有些数据集的 维度会达到上千甚至上万,这样如果不进行数据降维操作的话,对于机器学习模型来说,处理的过程可能会非常缓慢。另外,还会有一些特征之间有非常强烈的相关性,比如人口数据集中,如果性别为男这一列取值为1 ,则性别为女这一列取值只能是0 ,去掉其中任何一列不会丢失任何信息,在这种情况下,我们就会进行降维,以便降低模型的复杂度。 # 2、 对数据降维以便于进行可视化 下面我们还是以酒的数据集为例,首先为大家展示一下PCA 主成分分析法的使用。 在Jupyter Notebook 中输入代码如下: ``` # 导人红酒数据集 from sklearn.datasets import load_wine # 导入数据预处理工具 from sklearn.preprocessing import StandardScaler # 对红酒数据集进行预处理 scaler = StandardScaler() wine = load_wine() X = wine.data y = wine.target X_scaled = scaler.fit_transform(X) # 打印处理后的数据集形态 print(X_scaled.shape) ``` 在这一步中,我们首先使用StandardScaler 对数据进行了转换, 运行代码我们会得到如图9-12 所示的结果。 ``` (178, 13) ``` 图9-12 数据集中的样本数和特征数量 [结果分析]现在的数据集中,样本数量为178 个,而特征数量依然是13 个。接下来我们导入PCA 模块并对数据进行处理。 输入代码如下: ``` # 导入PCA from sklearn.decomposition import PCA # 设置主成分数量为2 以便我们进行可视化 pca = PCA(n_components=2) pca.fit(X_scaled) X_pca = pca.transform(X_scaled) # 打印主成分提取后的数据形态 print(X_pca.shape) ``` > ⚠️:因为PCA 主成分分析法属于无监督学习算法,所以这里只对X_scaled 进行了拟合,而并没有涉及分类标签y。 运行代码,会得到如图9-13 所示的结果。 ``` (178, 2) ``` 图9-13 经过主成分提取之后的数据形态 [结果分析] 从结果中可以看出,数据集的样本数量仍然是178 个,而特征数量只剩下2 个了。 下面我们用经过PCA 阵维的数据可视化情况,输入代码如下: ``` import matplotlib.pyplot as plt # 将三个分类中的主成分提取出来 X0 = X_pca[wine.target == 0] X1 = X_pca[wine.target == 1] X2 = X_pca[wine.target == 2] # 绘制散点图 plt.scatter(X0[:, 0], X0[:, 1], c='b', s=60, edgecolors='k') plt.scatter(X1[:, 0], X1[:, 1], c='g', s=60, edgecolors='k') plt.scatter(X2[:, 0], X2[:, 1], c='r', s=60, edgecolors='k') # 设置图注 plt.legend(wine.target_names, loc='best') plt.xlabel('component 1') plt.ylabel('component 2') # 显示图像 plt.show() ``` 运行代码,会得到如图9-14 所示的结果。  图9- 14 经过PCA 降维的酒数据集 [结果分析] 在之前的章节中,为了进行可视化,只能取酒数据集的前两个特征,而砍掉了其余的11 个特征,这当然是不科学的。现在好了,我们可以使用PCA 主成分分析法将数据集的特征向量降至二维,从而轻松进行可视化处理,同时又不会丢失太多的信息。 # 3、 原始特征与PCA 主成分之间的关系 相信有些读者朋友可能又有了新的问题,那就是,原来的13 个特征和经过PCA 降维后的两个主成分是怎样的关系呢?如果要从数学的角度来说,我们可能要讲清楚什么是内积和投影。不过鉴于我们不打算深入研究数学问题,这里还是用画图的方式来说明 这个问题。现在输入代码如下: ``` # 使用主成分绘制热度图 plt.matshow(pca . components_, cmap= 'plasma') # 纵轴为主成分数 plt.yticks([0,1],['component 1','component 2']) plt.colorbar() # 横轴为原始特征数量 plt.xticks(range(len(wine.feature_names)),wine.feature_names,rotation=60,ha='left') # 显示图像 plt.show() ``` 运行代码, 会得到如图9-15 所示的结果。  图9 ” 15 主成分与各特征值之间的关系 [结果分析} 现在我们来解释一下图9-15 ,在本图中,颜色由深至浅代表一个从- 0.5 ~ 0.4 的数值。而在两个主成分中,分别涉及了所有的13 个特征。如果某个特征对应的数字是正数,说明它和主成分之间是正相关的关系,如果是负数则相反。 现在又出现了新的问题,在实际的使用当中,我们应该如何设置PCA 的n_components 参数呢?这里告诉大家一个小窍门: 在scikit-learn 中, PCA 的n_components不仅可以代表成分的个数,还可以设置为降维之后保留信息的百分比,例如我们希望降维之后保留原特征90% 的信息, 那么就可以设置n_components 为0.9。