保险费用预测程序遇字符串转浮点错误,需转分类模型吗?求解决方案
问题解答
一、解决字符串特征无法转换为数值的问题
线性回归模型仅能处理数值型特征,你的数据中sex、smoker、region是字符串类型,必须先将它们转换为数值格式,常用两种编码方式:
1. 独热编码(One-Hot Encoding)
适合处理无序的多分类特征(比如region),也能处理二元特征,编码后不会引入顺序偏见,用pandas的get_dummies实现最便捷:
import pandas as pd import numpy as np from sklearn import linear_model from sklearn.model_selection import train_test_split # 读取数据 data = pd.read_csv("InsuranceCostCalculator/Insurance.csv") data = data[["age", "sex", "bmi", "children", "smoker", "region", "charges"]] # 对字符串特征做独热编码 encoded_data = pd.get_dummies(data, columns=["sex", "smoker", "region"]) # 划分特征和目标变量 predict_col = "charges" X = encoded_data.drop([predict_col], axis=1).values Y = encoded_data[predict_col].values # 拆分数据集 x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.1) # 训练模型 linear_model = linear_model.LinearRegression() linear_model.fit(x_train, y_train) # 预测并输出结果 predictions = linear_model.predict(x_test) for idx in range(len(predictions)): print(f"预测值: {predictions[idx]:.2f}, 测试特征: {x_test[idx]}, 真实值: {y_test[idx]:.2f}")
2. 标签编码(Label Encoding)
仅适合处理二元有序/无序特征(比如sex、smoker),将字符串映射为0、1这类数值:
import pandas as pd import numpy as np from sklearn import linear_model from sklearn.model_selection import train_test_split from sklearn.preprocessing import LabelEncoder data = pd.read_csv("InsuranceCostCalculator/Insurance.csv") data = data[["age", "sex", "bmi", "children", "smoker", "region", "charges"]] # 初始化标签编码器 le = LabelEncoder() # 处理二元特征 data["sex"] = le.fit_transform(data["sex"]) data["smoker"] = le.fit_transform(data["smoker"]) # 多分类特征仍建议用独热编码 data = pd.get_dummies(data, columns=["region"]) # 后续步骤同独热编码版本 predict_col = "charges" X = data.drop([predict_col], axis=1).values Y = data[predict_col].values x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.1) linear_model = linear_model.LinearRegression() linear_model.fit(x_train, y_train) predictions = linear_model.predict(x_test) for idx in range(len(predictions)): print(f"预测值: {predictions[idx]:.2f}, 测试特征: {x_test[idx]}, 真实值: {y_test[idx]:.2f}")
二、关于“必须用分类模型,回归无法实现”的说法
这个说法完全错误。保险费用预测的目标变量charges是连续数值(比如几千到几万的费用),这类预测连续值的任务属于属于回归任务,线性回归正是适合这类场景的基础模型;而分类模型是用来预测离散类别(比如是否患病、用户群体划分)的,和当前任务不匹配。
内容的提问来源于stack exchange,提问作者awab
相关产品推荐
相关产品推荐

