有没有办法在数据框中自动识别诸如Account_Number,Employee_ID,Transaction_ID等列的列,这些列通常不包含在模型构建中? 请注意,不同日期的同一员工可能有多条记录。简而言之,当它们不是唯一的时候如何识别无用的列?
答案 0 :(得分:0)
有几种方法可以识别数据集中的租约重要列/类/功能。相关性就是其中之一。请按照以下示例首先从Kaggle下载this电影数据集。
df = pd.read_csv("tmdb_5000_movies.csv")
df = df[["id", "budget", "popularity", "vote_average"]]
df.head()
这是数据框的外观:
id budget popularity vote_average
0 19995 237000000 150.437577 7.2
1 285 300000000 139.082615 6.9
2 206647 245000000 107.376788 6.3
3 49026 250000000 112.312950 7.6
4 49529 260000000 43.926995 6.1
我们正在寻找一种自动检测“id”是无用列的方法。
让我们找到每一列与另一列之间的相关性:
corr_df = pd.DataFrame(columns=list(df.columns))
for col_from in df.columns:
for col_to in df.columns:
corr_df.loc[col_from, col_to] = df[col_from].corr(df[col_to])
print(corr_df.head())
相关性只是介于-1和1之间的度量,接近零的数字表示两个类不相关,从零开始越远(即使在负方向)也表示两个参数耦合在一起某种意义。
观察id
与budget
和popularity
id budget popularity vote_average
id 1 -0.0893767 0.031202 -0.270595
budget -0.0893767 1 0.505414 0.0931457
popularity 0.031202 0.505414 1 0.273952
vote_average -0.270595 0.0931457 0.273952 1
让我们更进一步获得绝对值并总结所有相关性,具有最小相关性得分的类被认为是最无用的:
corr_df = corr_df.abs()
corr_df["sum"] = corr_df.sum(axis=0) - 1
print(corr_df.head())
结果:
id budget popularity vote_average sum
id 1 0.0893767 0.031202 0.270595 0.391173
budget 0.0893767 1 0.505414 0.0931457 0.687936
popularity 0.031202 0.505414 1 0.273952 0.810568
vote_average 0.270595 0.0931457 0.273952 1 0.637692
并不是说这种方法存在很多问题,例如:如果id从0增加到N,并且在具有恒定速率的行中有一个值也在增加,它们的相关性会很高;此外,某些列 X 与 Y 和id之间的相关性可能与 Y 列产生较小的相关性;尽管如此,绝大多数的结果在大多数情况下都足够好了。