You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

保险费用预测程序遇字符串转浮点错误,需转分类模型吗?求解决方案

问题解答

一、解决字符串特征无法转换为数值的问题

线性回归模型仅能处理数值型特征,你的数据中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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 17:55:18