Pandas的get_dummies用于机器学习的特征处理(二十九)

分类特征有两种:

  • 普通分类:性别、颜色
  • 顺序分类:评分、级别

对于评分,可以把这个分类直接转换成1、2、3、4、5表示,因为它们之间有顺序、大小关系。 但是对于颜色这种分类,直接用1/2/3/4/5/6/7表达,是不合适的,因为机器学习会误以为这些数字之间有大小关系。 get_dummies就是用于颜色、性别这种特征的处理,也叫作one-hot-encoding处理。

比如: 男性:1 0 女性:0 1 这就叫做one-hot-encoding,是机器学习对类别的特征处理

1、读取泰坦尼克数据集

import pandas as pd
df_train = pd.read_csv("./datas/titanic/titanic_train.csv")
df_train.head()
df_train.drop(columns=["Name", "Ticket", "Cabin"], inplace=True)
df_train.head()
df_train.info()

特征说明:

  • 数值特征:Fare
  • 分类-有序特征:Age
  • 分类-普通特征:PassengerId、Pclass、Sex、SibSp、Parch、Embarked

Survived为要预测的Label

2、分类有序特征可以用数字的方法处理

# 使用年龄的平均值,填充空值
df_train["Age"] = df_train["Age"].fillna(df_train["Age"].mean())

3、普通无序分类特征可以用get_dummies编码
其实就是one-hot编码

# series
pd.get_dummies(df_train["Sex"]).head()
# 便捷方法,用df全部替换
needcode_cat_columns = ["Pclass","Sex","SibSp","Parch","Embarked"]

df_coded = pd.get_dummies(
    df_train,
    # 要转码的列
    columns=needcode_cat_columns,
    # 生成的列名的前缀
    prefix=needcode_cat_columns,
    # 把空值也做编码
    dummy_na=True,
    # 把1 of k移除(dummy variable trap)
    drop_first=True
)

注意,One-hot-Encoding一般要去掉一列,不然会出现dummy variable trap,因为一个人不是male就是femal,它俩有推导关系 [https://www.geeksforgeeks.org/ml-dummy-variable-trap-in-regression-models/](https://www.geeksforgeeks.org/ml-dummy-variable-trap-in-regression-models/)

4、机器学习模型训练

y = df_coded.pop("Survived")
y.head()
X = df_coded
X.head()
from sklearn.linear_model import LogisticRegression
# 创建模型对象
logreg = LogisticRegression(solver='liblinear')

# 实现模型训练
logreg.fit(X, y)
logreg.score(X, y)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值