【机器学习】 Python降维方法列举

一、说明

      如果要给从事机器学习领域的人建议的话,那会是:永远不要忘记维度灾难。传统的解释是这样的:“如果你有很多输入维度,那么问题就变得很昂贵并且难以解决。”事实如此,但为什么会这样呢?让我们来更详细地讨论这个问题吧。

        维度灾难最直观的解释之一就是看单位超球面及其体积。那是什么意思?数据点主要表示为d维向量。我们假设特定问题中的所有数据点都位于单位超球面中。我们都知道3D中超球面的体积,它是:

 数据科学家只有一个——“维度的诅咒”。😉😉😉 维数是模型中预测变量或输入变量的数量,“诅咒”是指在模型中包含太多特征(预测变量)而导致的问题。

        维度的诅咒是指机器学习在处理高维数据时出现的问题。它指出,随着数据集中特征或维度数量的增加,有效建模特征与目标变量之间的关系所需的数据量呈指数级增长。这可能会导致过度拟合、精度降低和计算时间增加等问题。为了减轻维数的诅咒,可以使用特征选择、降维和集成方法等技术。

随着变量的添加,数据空间变得越来越稀疏,分类和预测模型失败,因为可用数据不足以跨如此多的变量提供有用的模型。添加变量带来的困难随着每个变量的添加呈指数增长。

二、在机器学习中处理维度的方法 

2.1 常见处理维度办法 

  1. 特征选择:从数据集中选择最相关的特征有助于降低维度并提高模型性能。
  2. 降维:主成分分析 (PCA)、线性判别分析 (LDA) 和 t 分布随机邻域嵌入 (t-SNE) 等技术可用于降低数据的维数,同时保留最重要的信息。
  3. 正则化:L1 和 L2 等正则化技术可以通过向损失函数添加惩罚项来帮助防止高维数据集中的过度拟合。
  4. 集成方法:组合多个模型的结果也有助于提高高维数据集的性能。
  5. 采样:增加训练数据集的大小也有助于克服维度的诅咒,但是,收集更多数据可能既耗时又昂贵。
  6. 合成数据生成:生成合成数据也可用于增加数据集的大小,尤其是在收集更多真实世界数据不可行的情况下。

重要的是要注意,处理维度诅咒的最佳方法取决于特定的问题和数据集。

以下是使用 scikit-learn 库在 Python 中处理维度诅咒的方法的实现:

2.2 功能选择 


from sklearn.feature_selection import SelectKBest, chi2
# Apply SelectKBest class to extract top 10 best features
bestfeatures = SelectKBest(score_func=chi2, k=10)
fit = bestfeatures.fit(X, y)
dfscores = pd.DataFrame(fit.scores_)
dfcolumns = pd.DataFrame(X.columns)
# Concatenate two dataframes for better visualization 
featureScores = pd.concat([dfcolumns,dfscores],axis=1)
featureScores.columns = ['Specs','Score']  # Naming the dataframe columns
print(featureScores.nlargest(10,'Score'))  # Print 10 best features

三、PCA降维 

        PCA(Principal Component Analysis)降维是一种常用的数据降维方法。它是通过线性变换将高维数据映射到低维空间中,同时保留数据的最大信息量。PCA可以将原始数据中的冗余信息和噪声去除,提高数据的表示效率,加快数据处理和分析的速度。

        PCA主要有以下步骤:

  1. 对原始数据进行标准化处理;
  2. 计算数据的协方差矩阵;
  3. 对协方差矩阵进行特征值分解,得到特征向量和特征值;
  4. 选取前k个最大的特征值所对应的特征向量,构成投影矩阵;
  5. 将原始数据乘以投影矩阵得到新的低维数据表示。

        通过降维,PCA能够去除数据的高维冗余特征,提高模型预测的准确性和效率。但是,由于PCA只考虑数据的线性关系,它可能会忽略非线性结构,导致信息丢失。因此,对于非线性问题,可以使用其他的降维方法,例如t-SNE。

from sklearn.decomposition import PCA
# Initializing PCA
pca = PCA(n_components=10)
# Fit and transform the data
X_pca = pca.fit_transform(X)

四、 正则化 

        正则化(Regularization)是一种降低机器学习模型泛化误差的技术。在机器学习中,我们通常使用训练数据来训练模型,并使用测试数据来评估模型的性能。但是,当模型过于复杂,训练集上的表现可能很好,但在测试集上的表现却很差。这种情况被称为过拟合(Overfitting)。

        正则化的目的就是通过对模型参数的惩罚来限制模型的复杂度,从而避免过拟合现象的发生。常见的正则化方法包括L1正则化、L2正则化和Elastic Net正则化。其中,L1正则化和L2正则化可以在模型中增加惩罚项来限制模型的参数,而Elastic Net正则化则是将这两种惩罚项结合起来。使用正则化方法可以有效减少模型的复杂度,提高模型的泛化能力。

from sklearn.linear_model import LogisticRegression
<span style="color:rgba(0, 0, 0, 0.8)"><span style="background-color:#ffffff"><span style="background-color:#f2f2f2"><span style="color:#242424"># Initializing logistic regression with L1 penalty
logreg = LogisticRegression(penalty='l1')# Fit the model
logreg.fit(X, y)</span></span></span></span>

五、随机森林方法 

        随机森林(Random Forest)是一种集成学习方法,通过组合多个决策树来提高预测的准确性和鲁棒性。它的基本想法是建立多颗决策树,每棵树都可以对数据进行分类或回归,然后将多个树的结果合并起来得到最终的结果。


from sklearn.ensemble import RandomForestClassifier
# Initializing logistic regression with L1 penalty
logreg = LogisticRegression(penalty='l1')
# Fit the model
logreg.fit(X, y)

六、重采样 

        重采样是指将一组数据从一个时间频率下采样到另一个时间频率上。它用于对信号进行采样和重构,以便能够更准确地分析和处理数据。常见的重采样方法包括线性重采样、最近邻重采样、抽样重采样等。重采样的目的是,当数据的采样频率过高或过低时,通过重采样使数据更加符合分析和处理的要求。

from sklearn.utils import resample
# Upsample minority class
X_upsampled, y_upsampled = resample(X[y==1],
                                      y[y==1],
                                      replace=True,
                                      n_samples=X[y==0].shape[0],
                                      random_state=1)
# Concatenate majority class with upsampled minority class
X_upsampled = np.concatenate((X[y==0], X_upsampled))
y_upsampled = np.concatenate((y[y==0], y_upsampled))

七、 合成数据生成 

from imblearn.over_sampling import SMOTE
# Initializing SMOTE
sm = SMOTE(sampling_strategy='minority', random_state=7)
# Fit and transform the data
X_sm, y_sm = sm.fit_resample(X, y)

八、各种方法的缺点和限制 

        以下是用于处理维度诅咒的方法的一些缺点和局限性:

  1. 特征选择:特征选择方法可能无法捕获特征和目标变量之间的复杂关系,并可能导致重要信息的丢失。
  2. 降维:降维方法可能并不总是保留原始数据集中存在的重要信息。
  3. 正则化:正则化在高维数据集中可能并不总是有效,并可能导致数据拟合不足。
  4. 集成方法:集成方法的计算成本可能很高,并且对于大型数据集可能不可行。
  5. 抽样:抽样方法可能并不总是产生原始数据集的代表性样本,并可能导致模型中的偏差。
  6. 合成数据生成:合成数据生成方法可能并不总是捕获原始数据集中存在的复杂关系,并可能导致过度拟合。

重要的是要仔细评估每种方法的缺点和局限性,并根据具体问题和数据集选择最合适的方法。

感谢您的阅读!将来我也会写更多的ML文章 😉

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无水先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值