多项式回归预测中国人寿保费 —— 从代码理解 PolynomialFeatures 与线性回归的配合

发布时间:2026/9/6 7:10:11

多项式回归预测中国人寿保费 —— 从代码理解 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线性求解核心认知多项式回归 特征工程升维 线性回归求解它不是一个新算法而是用线性回归的算法拟合非线性的关系。

相关新闻

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

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

2026/9/6 7:10:11

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

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

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

2026/9/6 7:10:11

解决报错 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…

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

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

2026/9/6 7:10:11

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

AI Agent接入Google SERP API全流程实战:从参数调优到稳定性保障

AI Agent接入Google SERP API全流程实战:从参数调优到稳定性保障

2026/9/6 8:20:44

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

团队批量做视频用什么 AI:从资产管理到局部返工的完整工作流

团队批量做视频用什么 AI:从资产管理到局部返工的完整工作流

2026/9/6 8:20:44

团队批量做视频,核心瓶颈不是单个镜头能不能生成,而是素材能不能集中管理、不满意的地方能不能只改一段、多人协同时版本会不会乱。选 AI 工具应先看主链路能否覆盖从想法到初版成片的完整流程,再看后期剪辑和单点能力如何衔接。小云雀 AI 的…

基于ESP32与Home Assistant的智能电房系统:千元级物联网能源监控方案

基于ESP32与Home Assistant的智能电房系统:千元级物联网能源监控方案

2026/9/6 8:20:44

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

vLLM高效部署Qwen3.8-Flash-Next:从环境配置到性能调优实战指南

vLLM高效部署Qwen3.8-Flash-Next:从环境配置到性能调优实战指南

2026/9/6 8:20:44

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

腾讯云AI Skills实战:从Agent技能设计到Serverless部署

腾讯云AI Skills实战:从Agent技能设计到Serverless部署

2026/9/6 8:20:43

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

国内有哪些ai产品?

国内有哪些ai产品?

2026/9/6 8:10:43

当前国内面向办公场景的AI产品数量较多,分属完全不同的产品形态。很多企业选型容易混淆问答工具、长文档工具和可执行任务的智能体平台,仅按知名度采购,上线后发现无法对接现有工作流、不能交付闭环成果。企业做产品发现,核心不是…

中国人民大学杨琳团队《Nature Communications》 | 全球潮汐湿地土壤有机碳时空格局与环境驱动:一项2009-2020年的全球评估

中国人民大学杨琳团队《Nature Communications》 | 全球潮汐湿地土壤有机碳时空格局与环境驱动:一项2009-2020年的全球评估

2026/9/6 1:19:56

本文首发于“生态学者”!从“湿地面积”到“土壤碳密度”:为什么需要重新认识潮汐湿地蓝碳变化?潮汐湿地位于陆地与海洋的交汇地带,包括红树林、盐沼和潮滩,是全球重要的蓝碳生态系统。其土壤能够长期储存大量有机碳&a…

adb抓包

adb抓包

2026/9/6 1:19:56

前言 本文介绍如何通过 tcpdump 在 Android 手机上抓取网络数据包,并在电脑端使用 Wireshark 进行分析。适用于需要排查 App 网络请求、分析接口调用或调试网络问题的开发与测试场景。1. 手机要有 root 权限2. 下载 tcpdump3. adb push C:\Users\zhangkuixun\Downlo…

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战

2026/9/6 1:19:56

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战 在云原生基础设施中,容器镜像体积直接决定了服务的部署速度与弹性扩容敏捷度。对于传统的 Go / Java 微服务,镜像体积通常被严格控制在 50MB 到 200MB 以内,拉取镜像只…

中国人民大学杨琳团队《Nature Communications》 | 全球潮汐湿地土壤有机碳时空格局与环境驱动:一项2009-2020年的全球评估

中国人民大学杨琳团队《Nature Communications》 | 全球潮汐湿地土壤有机碳时空格局与环境驱动:一项2009-2020年的全球评估

2026/9/6 1:19:56

本文首发于“生态学者”!从“湿地面积”到“土壤碳密度”:为什么需要重新认识潮汐湿地蓝碳变化?潮汐湿地位于陆地与海洋的交汇地带,包括红树林、盐沼和潮滩,是全球重要的蓝碳生态系统。其土壤能够长期储存大量有机碳&a…

adb抓包

adb抓包

2026/9/6 1:19:56

前言 本文介绍如何通过 tcpdump 在 Android 手机上抓取网络数据包,并在电脑端使用 Wireshark 进行分析。适用于需要排查 App 网络请求、分析接口调用或调试网络问题的开发与测试场景。1. 手机要有 root 权限2. 下载 tcpdump3. adb push C:\Users\zhangkuixun\Downlo…

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战

2026/9/6 1:19:56

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战 在云原生基础设施中,容器镜像体积直接决定了服务的部署速度与弹性扩容敏捷度。对于传统的 Go / Java 微服务,镜像体积通常被严格控制在 50MB 到 200MB 以内,拉取镜像只…

远程协作的工作台整理

远程协作的工作台整理

2026/9/3 6:56:24

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/4 7:42:10

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/5 23:14:13

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…