上一篇文章中,我们使用OrdinalEncoder把分类特征Sex和Embarked转换成了数值,但在Embarked这个特征中,我们用[0,1,2]表示港口其实是不合理的,因为这三个数值在算法看来,是连续且可以计算的,有可能在建模过程中对其进行大小比较,或者数学运算,这样会给算法传达一些不准确的信息,从而影响建模。所以对于这类没有关联的名义变量,我们需要使用OneHot编码,将其转换成哑变量。
以下示例中,我们依然使用泰坦尼克号数据的Sex和Embarked特征,做独热编码转换。
import pandas as pd from sklearn.preprocessing import OneHotEncoder data = pd.read_csv('./datas/titanic.csv') data.dropna(subset=['Embarked'], inplace=True) data.reset_index(drop=True, inplace=True) # 获取编码信息 enc = OneHotEncoder().fit(data[['Sex', 'Embarked']]) print(enc.categories_) print(enc.get_feature_names_out(['Sex', 'Embarked'])) # 编码 enc_arr = OneHotEncoder().fit_transform(data[['Sex', 'Embarked']]).toarray() print(enc_arr.shape) # 编码后数据处理(合并可能会出现多出两条数据的bug,需要先data.reset_index) columns = enc.get_feature_names_out(['Sex', 'Embarked']) enc_df = pd.DataFrame(enc_arr, columns=columns) new_data = pd.concat([data, enc_df], axis=1) # 删除数据列 new_data.drop(['Sex', 'Embarked'], axis=1, inplace=True) print(new_data.columns)
本文为 陈华 原创,欢迎转载,但请注明出处:http://edu.ichenhua.cn/read/265
- 上一篇:
- 归并排序算法
- 下一篇:
- Sklearn连续型特征二值化和分箱