机器学习基础 第五章 降维算法
来源:互联网 发布:中日海军对比2017知乎 编辑:程序博客网 时间:2024/06/06 10:40
1 主成分分析(PCA)
1.1 主成分应用
从第二章的图1.1.1中能看出来哪部电影的人气指数最高吗?当然是票房比较高或者检索次数比较高的电影人气指数要高。如何用主成分来分析人气指数哪?沿着数据跨度最大的方向,即方差最大的方向画出一条坐标轴,然后将原始的数据投影在新的坐标轴上,投影后值越大代表综合人气指数最高,见下图。下面会以一个例子演示如何计算主成分,及其相关应用。
1.2 一个例子
依然以电影为例,量表经常用于调查,例如在电影院看电影时遇到工作人员给你的一个量表,量表统计的内容包括:电影剧情,音乐,演员。经过打分后得到如下十部电影的评分结果
1.2.1 求主成分和主成分得分
1 对数据进行标准化
电影剧情得分,音乐得分,演员得分所对应的属性分别为
所以求得的第一二主成分如下
1.2.2 确定分析精度
主成分分析的结果精度如何,是通过累积贡献率来确定的,第i个主成分的贡献率定义如下
本例中各个主成分的累积贡献率为
累积贡献率越大精度越高,一般只求第一二主成分,所以第一二主成分的累积贡献率越高越好,但是高到什么程度没有一个固定的标准。
1.2.3 分析结果
第一主成分代表的物理意义为“综合性能”最好,在这个例子中就是“人气指数”
图1.2.1.2中表示的就是原始数据在第一主成分上的投影,投影越大“人气指数”越高,所以可以看出来5和10的人气指数最高,返回到表1.1中可以看出确实是5和10的人气指数比较高。
从图1.2.1.1中看出演员在对“人气指数”的影响最大。
图1.2.1.2可以用于数据降维。
1.2.4 程序解析
第一步:对数据标准化处理,对应1.2.1节中第1步
def unit(data): mean_ = np.mean(data, axis = 0) std_ = np.std(data, axis = 0, ddof = 1) return (data - mean_) / std_
第二步:计算协方差矩阵,对应于1.2.1节中第2步
def cov(data): mean_ = np.mean(data, axis = 0) data = data - mean_ cov_mat = data.T.dot(data) / (data.shape[0] - 1) return cov_mat
第三步:直接调用scipy.linalg中特征值求解函数,求特征值,对应于1.2.1节中第3步
[u, s] = eig(cov_matrix)
第四步:画出特征在新的坐标系下的散点图,对应于对应于1.2.1节中第4步
def plotItems(u): fig = plt.figure() ax = fig.add_subplot(111) ax.plot(np.abs(u[:, 0]), u[:, 1], 'o') u[:, 0] = np.abs(u[:, 0]) plt.text(u[0, 0], u[0, 1], 'story') plt.text(u[1, 0], u[1, 1], 'music') plt.text(u[2, 0], u[2, 1], 'performer') plt.xlabel('z1') plt.ylabel('z2') plt.show()
第五步:求出第一二主成分,并画出它们的散点图,对应于1.2.1节中第5步
def samplesPca(data, u): z1 = np.sum(data * np.abs(u[:, 0]), axis = 1) z2 = np.sum(data * u[:, 1], axis = 1) fig = plt.figure() ax = fig.add_subplot(111) markerline, stemlines, baseline = ax.stem(z1, z2, '-.') for i in range(0,z1.shape[0]): plt.text(z1[i], z2[i], str(i+1)) plt.xlabel('z1') plt.ylabel('z2') plt.setp(markerline, 'markerfacecolor', 'b') plt.setp(baseline, 'color','r', 'linewidth', 2) u[:, 0] = np.abs(u[:, 0]) ax.plot(u[:, 0], u[:, 1], '*') plt.text(u[0, 0], u[0, 1], 'story') plt.text(u[1, 0], u[1, 1], 'music') plt.text(u[2, 0], u[2, 1], 'performer') plt.show()
2 隐性语意分析(LSA)
隐性语意分析是自然语言处理中常用的方法,其基于SVD,和PCA类似,又有所不同,在对文本的处理中,LSA直接对词-文档矩阵进行处理,而不是协方差矩阵,下面介绍LSA在文本处理中的两种应用:文本摘要,文本降维。
2.1 基于LSA的文本摘要算法
(1)假设存在文本D,将文本D分解为单个句子,句子的集合为S,为单个句子;并将文档D中所有的词提取出来,这些词的集合为T,,为词语。
(2)用S和T构建文档D的术语-句子词频矩阵A。下图中的每一行表示文档中的词语在每个句子中出现的次数,该矩阵的构造有多种方式,如直接统计词频,或者采用权重策略,详细的过程见文献(1)4.3节。
2.2 文本降维
在2.1中看到经过分解的U矩阵如下,在文本聚类中原始的矩阵“词语-文档”可能会非常稀疏,在计算余弦相似性时导致计算的精度下降,所以可以采用SVD对其分解,然后对U矩阵进行聚类,因为U矩阵中的每行还是代表词语,只不过每列代表了隐性的语意,而且U矩阵是稠密的在计算余弦相似性是会比稀疏的效果更好。
3 应用实例-文本聚类
下面采用sklearn中的一个例子,详见http://scikit-learn.org/stable/auto_examples/document_clustering.html#example-document-clustering-py
对文本进行聚类,可以看到在采用降维后聚类的准确率从55%左右提高到了75%左右
- 机器学习基础 第五章 降维算法
- Deep Learning 第五章 机器学习基础
- 机器学习第五章
- 基础机器学习算法
- 基础机器学习算法
- 机器学习基础算法
- 机器学习实战第五章Logistic回归照葫芦画瓢算法实践
- 机器学习基础 第二章 预测算法
- 机器学习基础 第三章 分类算法
- 【机器学习】基础机器学习算法
- 【机器学习基础】决策树算法
- 机器学习基础算法小结
- 机器学习算法基础--矩阵
- 机器学习---基础算法简介
- [干货]基础机器学习算法
- 机器学习降维算法
- 《机器学习》+周志华+第五章习题+5.5实现标准BP算法和累积BP算法
- 第五章 基础算法 pending
- Effective Java 读书笔记——66:同步访问共享的可变数据
- 160. Intersection of Two Linked Lists
- 读《浪潮之巅》感想(2)
- Leetcode 39. Combination Sum
- python 6-3 如何解析简单的xml文档 使用标准库中的xml.etree.ElementTree,其中parse函数可以解析xml文档
- 机器学习基础 第五章 降维算法
- Linux Kernel 4.9中TCP BBR算法的科普解释
- 增强学习系列之(一):增强学习介绍
- 共同学习Java源代码-数据结构-TreeSet(一)
- 策略模式和Spring的结合在项目中的应用
- 371. Sum of Two Integers
- Codeforces 681C Heap Operation 【模拟】【堆】
- cf 341C (容斥原理)
- Win10 独立音量调整