我有一个巨大的数据集,我正在努力清理。在这个数据集中,我有6列代表1-10的评级系统。所以第一栏根据吸引力评价一个人,第二栏根据情报等评价。
attr1 attr2 attr3 attr4 attr5 attr6
2 5 6 8 7 2
5 9 6 9 7 3
9 8 7 5 8 6
... ...
我决定找到所有这些列的平均值并将其保存到新列中,然后删除这些列,所以现在而不是(attr1 - attr6)我离开...
avg_attr
5
6.5
7.166
...
这个代码是......
data['avg_attr'] = data[['attr1', 'attr2', 'attr3', 'attr4', 'attr5', 'attr6']].mean(axis=1)
# Convert columns to 1-dimensional Series array
series = data.columns.to_series()
# Attribute data can be dropped because we already have the total mean.
data = data.drop(series["attr1":"attr6"], axis=1)
..当我这样做时,我预计算法的准确性不会受到这种变化的影响,而且我认为它还有一个额外的好处,就是让我的数据看起来更干净。但是,应用此更改后,准确率会略微下降,为什么会这样呢?是因为我的算法现在不适合数据吗?
此外,有哪些我可以使用这些属性来提高准确率吗?
答案 0 :(得分:3)
很自然,准确度会降低。您正在使用mean
但不是相关性。在学习算法中,一个属性中的内部dependency
值正在影响另一个属性。如果您只是对所有属性求平均值,那么它如何在另一个属性中学习dependency
。
您可以放弃columns/attributes
的另一种方法是dimensional reduction
。您需要找到correlation
,并且可以删除具有更高correlation
的属性。
你可以简单地看到使用seaborn
import seaborn as sns
sns.heatmap(test_data.corr())
您可以可视化highly correlated attributes
并逐一删除。 Dimensional Reduction
是减少信息丢失的方法之一。我希望这个解释有所帮助。
答案 1 :(得分:1)
平均可能导致精度下降,可能是由于您提到的欠拟合。我建议尝试使用特征选择方法来选择合适的属性。