尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
多项式回归预测中国人寿保费 —— 从代码理解 PolynomialFeatures 与线性回归的配合
一、项目整体流程读取Excel数据 → KDE可视化做特征选择删掉不重要的特征 → BMI离散化连续值转分类 → One-Hot编码文本转数值 → PolynomialFeatures多项式升维造交叉特征 → 拆分训练集/测试集 → LinearRegression线性回归训练 → R² RMSE 对数误差 评估一句话概括用 PolynomialFeatures 造出非线性特征再丢给普通线性回归去拟合。这就是多项式回归的本质。二、为什么没用到梯度下降这是最大的疑惑点。答案在代码里from sklearn.linear_model import LinearRegression model LinearRegression() model.fit(X_train, y_train)sklearn 的LinearRegression底层用的不是梯度下降而是正规方程Normal Equation直接用公式一步求出最优解$$\theta (X^T X)^{-1} X^T y$$求解方式代表API适用场景正规方程解析解LinearRegression特征数少、数据量不大一步算出答案快且稳梯度下降SGDRegressor特征数非常多、数据量巨大时迭代逼近最优解如果想用梯度下降可以换成from sklearn.linear_model import SGDRegressor model SGDRegressor(max_iter1000, learning_rateinvscaling, eta00.01)两者结果接近但这个项目数据量不大LinearRegression更合适。三、函数3.1Path(__file__).parent—— 路径定位from pathlib import Path data_path Path(__file__).parent / 中国人寿.xlsx__file__Python 内置变量存的是当前脚本的完整路径Path(...)把字符串变成路径对象.parent取上一级目录脚本所在文件夹/pathlib 特有的路径拼接符作用不管你在哪个目录下执行python xxx.py都能找到同目录的数据文件避免路径找不到的问题。3.2sns.kdeplot—— 核密度估计图sns.kdeplot(datadata, xcharges, huesex, fillTrue)KDEKernel Density Estimation核密度估计画数据分布的平滑曲线xcharges看保费这一列的分布huesex按性别分组画两条曲线对比fillTrue曲线下方填充颜色作用可视化不同特征对保费的影响。作者发现 region地区和 sex性别对保费影响不大所以后续直接删掉了这两个特征。这是特征选择的可视化方法。3.3data.apply(convert, axis1, args(30,))—— 逐行处理def convert(df, bmi): df[bmi] fat if df[bmi] bmi else standard return df ​ data data.apply(convert, axis1, args(30,))apply(func, axis1)对 DataFrame 的每一行执行convert函数axis1 按行处理axis0 按列处理args(30,)给函数额外传参数即bmi30作用遍历每一行把数值型的 BMI 转成fat≥30或standard30的文本标签。这是特征离散化把连续值变成分类值。注意这里df其实是一行数据Series 类型不是整个 DataFrame变量名有点误导。3.4pd.get_dummies(data)—— One-Hot 编码data pd.get_dummies(data)把文本分类变量转成 0/1 数值列。比如 BMI 列有fat和standard两种值转换后bmi_fatbmi_standard1001smoker 列的 yes/no 也会变成smoker_no、smoker_yes两列。机器学习模型只能处理数值所以这步是必须的。3.5 评估指标函数含义方向model.score(X, y)R² 决定系数0~1越大越好1最完美mean_squared_error均方误差 MSE越小越好np.sqrt(MSE)RMSE单位和保费一致元越小越好mean_squared_log_error对数均方误差越小越好为什么要用对数误差保费跨度大几千到几万取对数可以压低大值的权重更关注相对误差而非绝对误差在价格预测中很常见。四、核心重点PolynomialFeatures 详解from sklearn.preprocessing import PolynomialFeatures poly PolynomialFeatures(degree2, interaction_onlyTrue, include_biasFalse) X_poly poly.fit_transform(X)4.1 它在干什么线性回归只能学保费 w1×age w2×bmi ...认为各特征各管各的。但现实中有组合拳效应——又老又胖的人风险可能暴增。线性模型表达不了这种交互。PolynomialFeatures 就是来造交叉特征的让模型有机会学习112的效果。degree2表示拿原来的特征两两组合造出一批新特征。4.2interaction_onlyTrue—— 只造交叉项不造平方项假设原始特征是[age, bmi]degree2 理论上能造出新特征类型interaction_onlyTrueinteraction_onlyFalseage × bmi交叉项✅ 保留✅ 保留age²平方项❌ 丢弃✅ 保留bmi²平方项❌ 丢弃✅ 保留通俗理解只关心特征A和特征B搭在一起会不会有额外影响不要age自己跟自己乘这种东西。好处是少造没用的特征模型更简洁不容易过拟合。4.3include_biasFalse—— 不加全1列线性回归有截距项 b数学上写成 $y w_0 \times 1 w_1 x_1 ...$所以可以额外加一列全为1的特征让模型学出 $w_0$。include_biasTrue多项式特征里多加一列全为1include_biasFalse不加为什么不加因为 sklearn 的LinearRegression自己默认就会算截距fit_interceptTrue。如果 PolynomialFeatures 又加了一列全1就重复了等于让模型算两次截距没必要。4.4 截距的作用 —— 不是更准而是能正确工作举个一维的例子有截距$y wx b$一条可以上下平移的直线没截距$y wx$一条必须经过原点(0,0)的直线保费和年龄正相关但年龄0时保费不可能是0。如果强制线过原点整条线会被拉歪所有预测都偏。所以截距不是锦上添花让预测更准而是让模型有能力把线放到正确的位置。没有它模型是残缺的。在这个代码里截距由LinearRegression负责算不需要PolynomialFeatures操心所以设include_biasFalse职责分明。五、完整代码与逐行注释import pandas as pd import seaborn as sns from pathlib import Path import matplotlib.pyplot as plt ​ # 用 __file__ 定位数据文件避免路径问题 data_path Path(__file__).parent / 中国人寿.xlsx data pd.read_excel(data_path) ​ # KDE可视化观察哪些特征对保费影响大 # sns.kdeplot(datadata, xcharges, huesex, fillTrue) # sns.kdeplot(datadata, xcharges, huesmoker, fillTrue) # sns.kdeplot(datadata, xcharges, hueregion, fillTrue) # 结论region、sex 影响不大删掉 data data.drop(columns[region, sex]) ​ # BMI离散化≥30为fat30为standard def convert(df, bmi): df[bmi] fat if df[bmi] bmi else standard return df data data.apply(convert, axis1, args(30,)) ​ # One-Hot编码文本转0/1数值列 data pd.get_dummies(data) ​ # 数据提取 X data.drop(columns[charges]) y data[charges] ​ # 多项式升维造交叉特征不加平方项不加偏置列 from sklearn.preprocessing import PolynomialFeatures poly PolynomialFeatures(degree2, interaction_onlyTrue, include_biasFalse) X_poly poly.fit_transform(X) ​ # 拆分训练集和测试集 from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test train_test_split(X_poly, y, test_size0.2, random_state1024) ​ # 线性回归用正规方程求解不是梯度下降 from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error, mean_squared_log_error import numpy as np ​ model LinearRegression() model.fit(X_train, y_train) ​ # 评估 print(训练集R²:, model.score(X_train, y_train)) print(测试集R²:, model.score(X_test, y_test)) print(训练集RMSE:, np.sqrt(mean_squared_error(y_train, model.predict(X_train)))) print(测试集RMSE:, np.sqrt(mean_squared_error(y_test, model.predict(X_test)))) print(训练集对数误差:, np.sqrt(mean_squared_log_error(y_train, model.predict(X_train)))) print(测试集对数误差:, np.sqrt(mean_squared_log_error(y_test, model.predict(X_test))))六、总结疑问答interaction_onlyTrue只造特征间的交叉项A×B不造平方项A²让模型更简洁include_biasFalse不加全1列因为LinearRegression自己会算截距不重复截距的作用让模型能把线放到正确位置不是更准而是能正确工作多项式回归的本质PolynomialFeatures造非线性特征 LinearRegression线性求解核心认知多项式回归 特征工程升维 线性回归求解它不是一个新算法而是用线性回归的算法拟合非线性的关系。
RELATED

相关推荐

东方博宜OJ 1477:字符串出现次数 ← BF算法

东方博宜OJ 1477:字符串出现次数 ← BF算法

【题目来源】 https://oj.czos.cn/p/1477 【题目描述】 一个字符串中任意个连续的字符组成的子序列为该字符串的子串。给定子串 s1 和它的一个字符串 s2,求 s1 在 s2 中出现的次数。 【输入格式】 第一行,表示字符串 s1,第二行表示字符串 s…

📅 2026/10/8 6:17:52
解决报错 Error: Missing optional dependency @openai/codex-linux-arm64

解决报错 Error: Missing optional dependency @openai/codex-linux-arm64

解决报错 Error: Missing optional dependency openai/codex-linux-arm64 一图看懂:问题复现: uname -a Linux hostname-2pbfv.foreman.pxe 5.10.0-282.0.0.184.oe2203sp3.aarch64 #1 SMP Wed Sep 17 13:32:56 CST 2025 aarch64 aarch64 aarch64 GNU/Lin…

📅 2026/10/7 16:54:30
如何通过AI营销机器人提升获客转化率?

如何通过AI营销机器人提升获客转化率?

AI营销机器人是现代企业提高获客转化率的重要工具。它们通过智能自动化,使企业能够更高效地优化客户互动和实施精准营销。机器人能够根据用户的数据和行为特点,快速生成个性化内容,进而加强客户的参与度和购买意愿。另外,这些工具…

📅 2026/10/28 13:57:54
MORE NEWS

更多资讯

📰

新蒲哪里可以考电工证真实经历告诉你怎么选培训机构

新蒲哪里可以考电工证真实经历告诉你怎么选培训机构 工地太忙根本没时间复习考试,这是很多一线电工的共同心声。尤其是像我这样在鹤壁水利工程一线工作的电工,每天忙得连饭都顾不上吃,哪还有时间去准备考试?但别小看这个电工证,它不仅是你从事特种作业的…

📰

蔡家坡电工证培训机构在哪考?工地太忙根本没时间复习考试

蔡家坡电工证培训机构在哪考?工地太忙根本没时间复习考试 工地太忙根本没时间复习考试,这几乎是每个在建项目上的电工都遇到过的问题。尤其是对于郑州的在职建筑工人来说,每天十几个小时的作业时间,几乎挤占了所有空闲。再加上电工作业涉及的科目多、知识…

📰

工地太忙根本没时间复习考试,电工证复审需要原件吗真实经历揭秘

工地太忙根本没时间复习考试,电工证复审需要原件吗真实经历揭秘 工地太忙根本没时间复习考试,这是很多电工朋友的真实写照。尤其是像周口这样的施工大市,项目赶进度、人员轮换频繁,电工证复审这事常常被忽视。今天我就从 电工证复审需要原件吗…

📰

怎样省高级电工证多少钱 三步解决复审延期难题

怎样省高级电工证多少钱 三步解决复审延期难题 证书过期了不知道怎么复审延期?别慌,这是很多电工从业者都会遇到的痛点。尤其是高级电工证,不仅关系到你的职业发展,还直接影响到项目参与资格和薪资待遇。很多人担心, 多少钱…

📰

盐城特种工培训到期换证流程:良心建议帮你避坑

盐城特种工培训到期换证流程:良心建议帮你避坑 证书过期了不知道怎么复审延期?很多工人朋友都遇到过这种情况,尤其是在盐城特种工培训体系下,特种作业操作证的复审流程并不简单,稍有疏忽就可能影响到自己的工作和安全。今天就来给大家讲讲,盐城特种工培…

📰

焊接类电工证怎么考?内部消息教你避坑不花冤枉钱

焊接类电工证怎么考?内部消息教你避坑不花冤枉钱 怕考不过白交培训费?现在就给你透露内部消息,焊接类电工证怎么考、怎么避坑,一步到位,省心又省钱! ### 焊接类电工证能干啥?别被忽悠了!…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬