为什么要降维?降维技术一览.doc
《为什么要降维?降维技术一览.doc》由会员分享,可在线阅读,更多相关《为什么要降维?降维技术一览.doc(12页珍藏版)》请在三一文库上搜索。
1、为什么要降维?降维技术一览你遇到过特征超过1000个的数据集吗?超过5万个的呢?我遇到过。降维是一个非常具有挑战性的任务,尤其是当你不知道该从哪里开始的时候。拥有这么多变量既是一个恩惠数据量越大,分析结果越可信;也是一种诅咒你真的会感到一片茫然,无从下手。面对这么多特征,在微观层面分析每个变量显然不可行,因为这至少要几天甚至几个月,而这背后的时间成本是难以估计的。为此,我们需要一种更好的方法来处理高维数据,比如本文介绍的降维:一种能在减少数据集中特征数量的同时,避免丢失太多信息并保持/改进模型性能的方法。什么是降维?每天,我们都会生成大量数据,而事实上,现在世界上约90%的数据都是在过去3到4
2、年中产生的,这是个令人难以置信的现实。如果你不信,下面是收集数据的几个示例:Facebook会收集你喜欢、分享、发布、访问的内容等数据,比如你喜欢哪家餐厅。智能手机中的各类应用会收集大量关于你的个人信息,比如你所在的地点。淘宝会收集你在其网站上购买、查看、点击的内容等数据。赌场会跟踪每位客户的每一步行动。随着数据的生成和数据收集量的不断增加,可视化和绘制推理图变得越来越困难。一般情况下,我们经常会通过绘制图表来可视化数据,比如假设我们手头有两个变量,一个年龄,一个身高。我们就可以绘制散点图或折线图,轻松反映它们之间的关系。下图是一个简单的例子:其中横坐标X1的单位为“千克”,纵坐标X2的单位为
3、“磅”。可以发现,虽然是两个变量,但它们传达的信息是一致的,即物体的重量。所以我们只需选用其中的一个就能保留原始意义,把2维数据压缩到1维(Y1)后,上图就变成:类似地,我们可以把数据从原本的p维转变为一系列k维的子集(kMissing Value Ratio)假设你有一个数据集,你第一步会做什么?在构建模型前,对数据进行探索性分析必不可少。但在浏览数据的过程中,有时候我们会发现其中包含不少缺失值。如果缺失值少,我们可以填补缺失值或直接删除这个变量;如果缺失值过多,你会怎么办呢?当缺失值在数据集中的占比过高时,一般我会选择直接删除这个变量,因为它包含的信息太少了。但具体删不删、怎么删需要视情况
4、而定,我们可以设置一个阈值,如果缺失值占比高于阈值,删除它所在的列。阈值越高,降维方法越积极。下面是具体代码:# 导入需要的库import pandas as pdimport numpy as npimport matplotlib.pyplot as plt加载数据:# 读取数据train=pd.read_csv(Train_UWu5bXk.csv)注:应在读取数据时添加文件的路径。用.isnull().sum()检查每个变量中缺失值的占比:train.isnull().sum()/len(train)*100如上表所示,缺失值很少。我们设阈值为20%:# 保存变量中的缺失值a = tra
5、in.isnull().sum()/len(train)*100# 保存列名variables = train.columnsvariable = for i in range(0,12):if aitem_Weight.fillna(trainItem_Weight.median, inplace=True)trainOutlet_Size.fillna(trainOutlet_Size.mode()0, inplace=True)检查缺失值是否已经被填充:train.isnull().sum()/len(train)*100再计算所有数值变量的方差:train.var()如上图所示,和其他
6、变量相比,Item_Visibility的方差非常小,因此可以把它直接删除。umeric = trainItem_Weight, Item_Visibility, Item_MRP, Outlet_Establishment_Yearvar = numeric.var()numeric = numeric.columnsvariable = for i in range(0,len(var):ifvari=10: # 将阈值设置为10variable.append(numerici+1)以上代码帮我们列出了方差大于10的所有变量。3. 高相关滤波(High Correlation filter
7、)如果两个变量之间是高度相关的,这意味着它们具有相似的趋势并且可能携带类似的信息。同理,这类变量的存在会降低某些模型的性能(例如线性和逻辑回归模型)。为了解决这个问题,我们可以计算独立数值变量之间的相关性。如果相关系数超过某个阈值,就删除其中一个变量。作为一般准则,我们应该保留那些与目标变量显示相当或高相关性的变量。首先,删除因变量(ItemOutletSales),并将剩余的变量保存在新的数据列(df)中。df=train.drop(Item_Outlet_Sales, 1)df.corr()如上表所示,示例数据集中不存在高相关变量,但通常情况下,如果一对变量之间的相关性大于0.5-0.6,
8、那就应该考虑是否要删除一列了。4. 随机森林(Random Forest)随机森林是一种广泛使用的特征选择算法,它会自动计算各个特征的重要性,所以无需单独编程。这有助于我们选择较小的特征子集。在开始降维前,我们先把数据转换成数字格式,因为随机森林只接受数字输入。同时,ID这个变量虽然是数字,但它目前并不重要,所以可以删去。from sklearn.ensemble importRandomForestRegressordf=df.drop(Item_Identifier, Outlet_Identifier, axis=1)model = RandomForestRegressor(rando
9、m_state=1, max_depth=10)df=pd.get_dummies(df)model.fit(df,train.Item_Outlet_Sales)拟合模型后,根据特征的重要性绘制成图:features = df.columnsimportances = model.feature_importances_indices = np.argsort(importances0:9) # top 10 featuresplt.title(Feature Importances)plt.barh(range(len(indices), importancesindices, color
10、=b, align=center)plt.yticks(range(len(indices), featuresi for i in indices)plt.xlabel(Relative Importance)plt.show()基于上图,我们可以手动选择最顶层的特征来减少数据集中的维度。如果你用的是sklearn,可以直接使用SelectFromModel,它根据权重的重要性选择特征。from sklearn.feature_selection importSelectFromModelfeature = SelectFromModel(model)Fit = feature.fit_tr
11、ansform(df, train.Item_Outlet_Sales)5. 反向特征消除(Backward Feature Elimination)以下是反向特征消除的主要步骤:先获取数据集中的全部n个变量,然后用它们训练一个模型。计算模型的性能。在删除每个变量(n次)后计算模型的性能,即我们每次都去掉一个变量,用剩余的n-1个变量训练模型。确定对模型性能影响最小的变量,把它删除。重复此过程,直到不再能删除任何变量。在构建线性回归或Logistic回归模型时,可以使用这种方法。from sklearn.linear_model importLinearRegressionfrom sklea
12、rn.feature_selection import RFEfrom sklearn import datasetslreg = LinearRegression()rfe = RFE(lreg, 10)rfe = rfe.fit_transform(df, train.Item_Outlet_Sales)我们需要指定算法和要选择的特征数量,然后返回反向特征消除输出的变量列表。此外,rfe.ranking_可以用来检查变量排名。6. 前向特征选择(Forward Feature Selection)前向特征选择其实就是反向特征消除的相反过程,即找到能改善模型性能的最佳特征,而不是删除弱影响特
13、征。它背后的思路如下所述:选择一个特征,用每个特征训练模型n次,得到n个模型。选择模型性能最佳的变量作为初始变量。每次添加一个变量继续训练,重复上一过程,最后保留性能提升最大的变量。一直添加,一直筛选,直到模型性能不再有明显提高。from sklearn.feature_selection import f_regressionffs = f_regression(df,train.Item_Outlet_Sales )上述代码会返回一个数组,其中包括变量F值和每个F对应的p值。在这里,我们选择F值大于10的变量:variable = for i in range(0,len(df.colum
14、ns)-1):if ffs0i =10:variable.append(df.columnsi)注:前向特征选择和反向特征消除耗时较久,计算成本也都很高,所以只适用于输入变量较少的数据集。到目前为止,我们介绍的6种方法都能很好地解决示例的商场销售预测问题,因为这个数据集本身输入变量不多。在下文中,为了展示多变量数据集的降维方法,我们将把数据集改成Fashion MNIST,它共有70,000张图像,其中训练集60,000张,测试集10,000张。我们的目标是训练一个能分类各类服装配饰的模型。数据集2:Fashion MNIST7. 因子分析(Factor Analysis)因子分析是一种常见的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 为什么 要降维 技术 一览
链接地址:https://www.31doc.com/p-3371244.html