本系列目的在于总结每一个分类器的特点(优点、缺点、使用数据类型、使用时的注意事项等)。相关代码自己搜。
python:建议使用2.7
python常用函数库:NumPy、scikit-learn等
python集成环境:anaconda
毕业季,玩了20天。
降维的好处:
使数据集更易使用;降低算法开销;去除噪声;使结果更易理解。
常见的降维技术:
主成分分析(principal component analysis,pca)。在pca中,数据从原来的坐标系转换到了新的坐标系,新坐标系的选择是由数据本身决定的。第一个新坐标轴选择的是原始数据中方差最大的方向,第二个新坐标轴的选择和第一个坐标轴正交且具有最大方差的方向。该过程一直重复,重复次数为原始数据中特征的数目。我们会发现,大部分方差都包含在最前面的几个新坐标轴中。因此,我们可以忽略余下的坐标轴,即对数据进行了降维处理。
因子分析(factor analysis)。在因子分析中,我们假设在观察数据的生成中有一些观察不到的隐变量(latent variable)。假设观察数据是这些隐变量和某些噪声的线性组合。那么隐变量的数据可能比观察数据的数目少,也就是说通过找到隐变量就可以实现数据的降维。
独立成分分析(independent component analysis,ICA)。ICA假设数据是从N个数据源生成的,这一点和因子分析有些类似。假设数据为多个数据源的混合观察结果,这些数据源之间在统计上是相互独立的,而在PCA中只假设数据是不相关的。同因子分析一样,如果数据源的数目少于观察数据的数目,则可以实现降维过程。
在上述3种降维技术中,PCA的应用目前最为广泛,因此本章主要关注pca。
优点:降低数据复杂度,识别最重要的某些特征
缺点:有可能损失有用信息
使用数据类型:数值型数据
使用时注意事项:
0、在等式A*v = lambda*v中,v是特征向量,lambda是特征值。特征值都是简单的标量值,因此A*v = lambda*v代表的是:如果特征向量v被某个矩阵A左乘,那么它就等于某个标量lambda乘以v 。
1、将数据转换成前N个主成分的伪码大致如下:
去除平均值
计算协方差矩阵
计算协方差矩阵的特征值和特征向量
将特征值从大到小排序
保留最上面的N个特征向量
将数据转换到上述N个特征向量构建的新空间中
2、如果数据中出现缺失值,则用平均值来代替缺失值,平均值根据那些非缺失值得到。
3、通过观察主成分所对应的方差百分比和累积方差百分比,来判断保留多少个主特征。。我们不用保留了多少特征来衡量主成分分析的效果,而用保留的累计方差百分比来衡量!
4、PCA的实现多是直接使用奇异值分解(singular value decomposition,SVD);信息检索利用SVD的方法为隐性语义索引(Latent
Semantic Indexing, LSI) 或隐性语义分析(LatentSemanticAnalysis, LSA)。在LSI中,一个矩阵是由文档和词语组成的。当我们在该矩阵上应用SVD时,就会构建出多个奇异值。这些奇异值代表了文档中的概念或主题,在词语拼写错误或者具有同义词时,只基于词语存在与否的简单搜索方法会遇到问题,而SVD则能将他们映射为同一概念,这一特点可以用于更高效的文档搜索。
5、SVD公式:DATA[m*n] = U[m*m] * Sigma[m*n] * V_transport[n*n]。上述分解中会构建出一个矩阵Sigma[m*n],该矩阵只有对角元素,其他元素均为0。另一个惯例就是,Sigma[m*n]的对角元素是从大到小排列的。这些对角元素称为奇异值,它们对应了原始数据集矩阵DATA[m*n]的奇异值。矩阵的特征值和奇异值都能告诉我们数据集中的重要特征。奇异值和特征值是有关系的,实际上,这里的奇异值就是矩阵DATA[m*n] * DATA_transport[n*m]特征值的平方根。由于矩阵Sigma[m*n]只有从大到小排列的对角元素。在科学和工程中,一直存在这样一个普
遍事实:在某个奇异值的数目(r个)之后,其他的奇异值都置为0。这就意味着数据集中仅有r个重要特征,而其余特征则都是噪声或冗余特征,从而实现降维,用公式表示是:lowData=originalData.T*U[:,:N]*sigN.I。而重构原始数据的公式为:DATA[m*n] ~= U[m*k] * Sigma[k*k] * V_transport[k*n],其中k<m且k<n。。注意降维表示和重构数据是两码事。
6、在推荐系统中,计算相似度有两种方式,行与行之间比较的是基于用户的相似度,列与列之间比较的则是基于物品的相似度。到底使用哪一种相似度呢?这取决于用户或物品的数目。基于物品相似度计算的时间会随物品数量的增加而增加,基于用户的相似度计算的时间则会随用户数量的增加而增加。如果我们有一个商店,那么最多会有几千件商品。如果用户的数目很多,那么我们可能倾向于使用基于物品相似度的计算方法。对于大部分产品导向的推荐引擎而言,用户的数量往往大于物品的数量,即购买商品的用户数会多于出售的商品种类。
7、推荐引擎面临的问题就是如何在缺乏数据时给出好的推荐。这称为冷启动(cold-start)问题,处理起来十分困难。这个问题的另一个说法是,用户不会喜欢一个无效的物品,而用户不喜欢的物品又无效(也就是说,在协同过滤杨景下,由于新物品到来时由于缺乏所有用户对其的喜好信息,因此无法判断每个用户对其的喜好。而无法判断某个用户对其的喜好,也就无法利用该商品。)。冷启动问题的解决方案,就是将推荐看成是搜索问题。为了将推荐看成是搜索问题,我们可能要使用所需要推荐物品的属性。在餐馆菜肴的例子中,我们可以通过各种标签来标记菜肴,比如素食、美式BBQ、
价格很贵等。同时,我们也可以将这些属性作为相似度计算所需要的数据,这被称为基于内容(content-based)的推荐。可能,基于内容的推荐并不如我们前面介绍的基于协同过滤的推荐效果好,但我们拥有它,这就是个良好的开始。
8、SVD的另一个应用是图像压缩。第五点中提到,重构原始数据的公式为:DATA[m*n] ~= U[m*k] * Sigma[k*k] * V_transport[k*n],其中k<m且k<n。。所以我们只要存储这三个矩阵U[m*k]、Sigma[k*k] 、 V_transport[k*n],即可重构出原图像矩阵DATA[m*n] ,而存储数据量将大大减少。