Python 评分随着使用PCA的组件数量的增加而增加

Python 评分随着使用PCA的组件数量的增加而增加,python,scikit-learn,data-science,pca,Python,Scikit Learn,Data Science,Pca,我最近开始在机器学习领域工作,并使用python进行相关工作。今天,我正在处理一个数据集,在这个数据集上,我想应用降维并应用我的模型来评估分数。这个数据集有30个特征 我从一个简单的算法开始,这是逻辑回归,但在应用逻辑回归之前,我想做一个主成分分析。 为了确定哪个分量的数量是最好的,我使用gridsearchCV和我的逻辑回归,只使用C参数和PCA,在这里我选择分量的数量。 我得到的结果是,我使用的PCA组件越多,精度得分就越好。对于n_分量=30的示例,我得到的精度分数为0.81 问题是,我认

我最近开始在机器学习领域工作,并使用python进行相关工作。今天,我正在处理一个数据集,在这个数据集上,我想应用降维并应用我的模型来评估分数。这个数据集有30个特征

我从一个简单的算法开始,这是逻辑回归,但在应用逻辑回归之前,我想做一个主成分分析。 为了确定哪个分量的数量是最好的,我使用gridsearchCV和我的逻辑回归,只使用C参数和PCA,在这里我选择分量的数量。 我得到的结果是,我使用的PCA组件越多,精度得分就越好。对于n_分量=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_组件]:30}

提前感谢您的回复


编辑:我添加了这个屏幕截图以获取更多关于分数和组件数量的信息。一般来说,当你进行维度缩减时,你会丢失一些信息。因此,使用全套PCA功能获得更高的分数也就不足为奇了。使用很少的功能确实可以帮助提高分数,但不一定,使用PCA进行降维还有其他很好的理由。以下是PCA的主要优势:

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

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

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

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

  • 主成分分析对变量的缩放非常敏感。例如,如果数据集中有一个
    温度
    列,则会得到不同的转换,这取决于是使用摄氏度还是华氏度作为单位,因为它们的刻度不同。当变量具有不同的尺度时,主成分分析有点随意。这可以通过将所有变量调整为单位方差来纠正,但代价是修改(压缩或扩展)所有维度中变量的波动

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

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


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

使用较少的功能。。。这有助于提高分数
。可以,但不能肯定。只有CV可以告诉您预处理是否会提高模型分数。看到另一个成功尝试功能选择的例子嗨,非常感谢你的回复,让我明白了:)