Python机器学习实践代码报错:tuple无reshape属性,如何解决?
解决OneHotEncoder使用中的reshape报错问题
错误原因
pd.Series.factorize()方法返回的是元组(tuple),包含两个元素:编码后的数值数组、对应的原始类别数组。你直接对这个元组调用reshape,自然会触发tuple没有reshape属性的错误。
修正方案
步骤1:提取编码后的数组
从factorize的返回结果中,只取第一个元素(编码后的数值数组),第二个元素(类别)可以用下划线_接收(表示不需要使用)。
步骤2:调整数组维度
OneHotEncoder要求输入必须是二维数组(格式为(样本数, 特征数)),所以要把一维的编码数组转成二维,用reshape(-1, 1)即可(-1表示自动计算样本数量)。
修正后的完整代码
import pandas as pd from sklearn.preprocessing import OneHotEncoder data = pd.read_csv('housing.csv') housing = data['ocean_proximity'] encoder = OneHotEncoder() # 提取factorize返回的编码数组,忽略类别信息 housing_cat_fac, _ = housing.factorize() # 转换为OneHotEncoder要求的二维格式 housing_final = encoder.fit_transform(housing_cat_fac.reshape(-1, 1))
更简洁的替代方案
其实OneHotEncoder可以直接处理字符串类型的分类特征,不需要提前用factorize编码,直接传入二维格式的特征即可:
import pandas as pd from sklearn.preprocessing import OneHotEncoder data = pd.read_csv('housing.csv') housing = data['ocean_proximity'] encoder = OneHotEncoder() # 直接将Series转为DataFrame(自动变成二维格式)传入 housing_final = encoder.fit_transform(housing.to_frame())
内容的提问来源于stack exchange,提问作者Vahid Agha ahmadi
相关产品推荐
相关产品推荐

