如何在sklearn中处理非整数字符串数据以适配fit训练方法?
非整数(字符串)类型数据集处理方案
首先明确核心逻辑:sklearn所有模型仅支持数值类型的输入,字符串形式的分类特征、分类目标都需要先转换为数值编码,直接使用astype强制转换会报错,因为字符串无法直接映射为有效数值。
步骤1:读取数据并拆分X和y
首先从csv读取数据后,按需求拆分特征矩阵X和目标列y,你当前需求是将value作为目标列,所以特征取剩余的type列即可:
import pandas as pd # 读取本地csv文件 df = pd.read_csv("你的文件路径.csv") # 拆分特征X(所有输入特征列)和目标y(预测目标列) X = df[["type"]] y = df["value"]
步骤2:字符串编码转换
特征编码(处理X的字符串值)
你的type列属于无序分类特征(g和k没有高低顺序之分),优先使用独热编码转换:
from sklearn.preprocessing import OneHotEncoder # 初始化独热编码器,sparse_output=False直接输出数组,drop='first'避免多重共线性 ohe = OneHotEncoder(sparse_output=False, drop="first") # 拟合数据同时完成转换 X_encoded = ohe.fit_transform(X)
如果是有顺序的分类特征,可以替换为OrdinalEncoder做编码。
目标编码(处理y的字符串值)
分类任务的字符串目标使用LabelEncoder转换为数值标签:
from sklearn.preprocessing import LabelEncoder le = LabelEncoder() y_encoded = le.fit_transform(y)
后续预测完成后可以用le.inverse_transform(y_pred)把数值标签转回原始字符串。
步骤3:模型训练
编码完成后就可以正常调用sklearn的fit方法训练:
from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier # 拆分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X_encoded, y_encoded, test_size=0.2, random_state=42) # 初始化模型训练 model = RandomForestClassifier() model.fit(X_train, y_train)
注意事项
- 新的预测数据做特征编码时,必须调用已经拟合过的
ohe.transform(新数据),不能重新fit,避免编码规则不一致。 - 若存在多列字符串特征,所有分类特征都需要按特征类型做对应编码后再输入模型。
内容的提问来源于stack exchange,提问作者usersman
相关产品推荐
相关产品推荐

