【问题标题】:Scoring increasing with number of components using PCA得分随着使用 PCA 的组件数量而增加
【发布时间】:2021-02-08 20:58:54
【问题描述】:

我最近开始使用 python 在机器学习和与之相关的领域工作。今天我正在研究一个数据集,我想在其中应用降维并应用我的模型来评估分数。这个数据集有 30 个特征。

我从一个简单的算法开始,即逻辑回归,但在应用逻辑回归之前,我想做一个 PCA。 为了确定最好的组件数量,我使用了 gridsearchCV 和我的逻辑回归,只使用 C 参数和我选择组件数量的 PCA。 我得到的结果是,我用于 PCA 的组件越多,精度得分就越高。对于 n_components=30 的示例,我的精度得分为 0.81。

问题是我认为 PCA 用于降维(即使用更少的特征)并且它可以帮助提高分数。有什么不明白的地方吗?

pca = PCA()
logistic = LogisticRegression()
pipe = Pipeline(steps=[('pca', pca), ('logistic', logistic)])

param_grid = {
    'pca__n_components': [5,10,15,20,25,30],
    'logistic__C': [0.01,0.1,1,10,100]
}
search = GridSearchCV(pipe, param_grid, cv=5, n_jobs=-1, scoring='precision') # fix adding a tuple scoring 
search.fit(X_train, y_train)
print("Best parameter (CV score=%0.3f):" % search.best_score_)
print(search.best_params_)
results = pd.DataFrame(search.cv_results_)

输出:最佳参数(CV 分数=0.881): {'logistic__C':0.01,'pca__n_components':30}

提前感谢您的回复

编辑:我添加此屏幕截图以获取有关带有组件数量 的分数的更多信息

【问题讨论】:

  • working with fewer features ... it could help increasing score。它可以但不能肯定。只有 CV 可以告诉您预处理是否会提高模型分数。查看另一个成功尝试特征选择的示例here

标签: python scikit-learn data-science pca


【解决方案1】:

一般来说,当你进行降维时,你会丢失一些信息。使用全套 PCA 功能获得更高分数也就不足为奇了。使用少量特征确实可以帮助提高分数,但不一定,使用 PCA 进行降维还有其他充分的理由。以下是 PCA 的主要优势:

  • PCA 是一种很好的降维技术(有其自身的局限性),因为它将数据集的方差集中在计算出的新空间的第一维中。因此,就数据集携带的信息而言(在某些假设下),删除最后一个特征是以最小的成本完成的。使用 PCA 进行降维通过限制特征数量来降低过度拟合的风险,同时丢失最少的信息。从这个意义上说,较少的特征可以通过避免过度拟合来提高分数,但这并不总是正确的。

  • 在处理噪声数据时,使用 PCA 进行降维也很有用。 PCA 不会直接消除噪声,但前几个特征将具有更高的信噪比,因为数据集的方差集中在那里。最后的特征可能会受到噪声的支配而被丢弃。

  • 由于 PCA 在新的正交基础上投影数据集,因此新特征将彼此独立。许多机器学习算法通常需要此属性来实现最佳性能。

当然,在任何情况下都不应使用 PCA,因为它有自己的假设和局限性。以下是我认为的主要内​​容(非详尽):

  • PCA 对变量的缩放很敏感。例如,如果您的数据集中有一个temperaturecolumn,您将获得不同的转换,具体取决于您使用摄氏度还是华氏度作为单位,因为它们的比例不同。当变量有不同的尺度时,PCA 有点随意。这可以通过将所有变量缩放到单位方差来纠正,但代价是修改(压缩或扩展)变量在所有维度上的波动。

  • PCA 捕获特征之间的线性相关性,但无法捕获非线性相关性。

在您的情况下,有趣的是比较使用和不使用 PCA 转换获得的分数。你会看到使用它是否有好处。

最后但同样重要的是,你的情节展示了一件有趣的事情。 20 到 30 个特征之间的分数增益非常低(1%?)。您可能想知道是否值得为这个非常低的增益保留十个附加功能。事实上,保留更多特征会增加模型泛化能力较低的风险。交叉验证已经降低了这种风险,但不能保证当您将模型应用于未见数据时,这些未见数据将具有与您的训练数据集完全相同的属性。

【讨论】:

  • 嗨,非常感谢您的回复让我明白了:)
猜你喜欢
  • 2021-05-31
  • 1970-01-01
  • 2014-04-18
  • 1970-01-01
  • 2020-08-10
  • 2020-11-03
  • 2021-04-03
  • 2016-01-21
  • 2017-05-27
相关资源
最近更新 更多