机器学习:升维(Polynomial Regression)

本篇文章包含升维的基本概念以及代码演示部分

环境:Pycharm

一,升维

1.概念

在低纬度中,我们难以对混合在一起的数据进行分类,即使强硬地去拟合,最终训练的模型也会出现过拟合,不尽人意。这时,我们可以通过某些算法将样本点投射到更高维度以此分开混合在一起的样本点。例如将二维的点群通过自生坐标(x1,y1)相乘x1*y1作为纵轴方向的分量。如此我们将点投射到三维空间中,从而我们可以用一个平面来划分样本点。

其中,SVM算法就利用了升维的特性。

2.目的

升维的目的时为了解决欠拟合问题的,也就是为了提高模型的准确率为目的。当维度不够时,说白了就是对于预测结果考虑的因素少,结果自然而然不够精确。

3.多项式回归

多项式回归时升维的一种,它可以算是机器学习中的一种算法,不过和归一化一样一般算作数据预处理手段,他的目的就是将已有的维度进行组合来拓展维度。

当数据呈现非线性关系,即y不随x线性变化时,继续使用多元线性回归模型效果难堪,对此我们有两种对应方法:

(1)使用非线性算法,比如回归树,神经网络等

(2)将数据变成线性关系

而升维就是将数据从非线性关系转变为线性关系的手段。

假设数据集有两个维度x1,x2,那么使用多元线性回归就是y=w1x1+w2x2,当使用二阶多项式升维,数据集就从原来的x1,x2拓展成x1,x2,x1**2,x2**2,x1*x2五个维度,同时将非线性数据转化为线性数据。

二,代码演示

python 复制代码
import numpy as np
from sklearn.preprocessing import PolynomialFeatures
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

np.random.seed(42)#固定每次随机结果,用来测试算法
m = 100
X = 6*np.random.rand(m,1) - 3
y = 0.5*X**2 + X + 2 + np.random.randn(m,1)
#分割数据集为训练集和测试集,用于后面检测拟合
X_train = X[:80]
y_train = y[:80]
X_test = X[80:]
y_test = y[80:]
plt.plot(X,y,'b.')
d = {1:'g-',2:'r+',10:'y*'}#键代表提升的维度,值为图像颜色
for i in d:
    poly_features = PolynomialFeatures(degree=i,include_bias=True)#将特征值升维,degree代表提升维度,include_bias添加偏置
    X_poly_train = poly_features.fit_transform(X_train)
    X_poly_test = poly_features.fit_transform(X_test)
    lin_reg = LinearRegression(fit_intercept=False)
    lin_reg.fit(X_poly_train,y_train)
    print("{}-Dimension:".format(i))
    print("bias:",lin_reg.intercept_)
    print("w:",lin_reg.coef_)


    y_train_predict = lin_reg.predict(X_poly_train)
    y_test_predict = lin_reg.predict(X_poly_test)


    plt.plot(X_poly_train[:,1],y_train_predict,d[i])#因为维度拓展后不方便绘图,为了数据可视化,我们选取一个维度
    print("Train_MSE:",mean_squared_error(y_train,y_train_predict))#训练集的残差和
    print("Test_MSE:", mean_squared_error(y_test,y_test_predict))#测试集的残差和
    print("Distance:",mean_squared_error(y_test,y_test_predict) - mean_squared_error(y_train,y_train_predict))#训练集有测试集残差区别
    print("---------------" * 10)

plt.show()

运行结果

因为代码中我们将偏置置零,bias为0。

可以看到,w从一维拓展为二维。后面同理可得。

观察可得,随着维度上升,模型从欠拟合到合适拟合再到过拟合,下图可视化后更加明显。

由图可知,红色的曲线拟合得最好,而棕黄色的曲线过拟合。

相关推荐
清水白石0084 小时前
隔离的艺术:用 `unittest.mock` 驯服外部依赖,让测试真正可控
python
gorgeous(๑>؂<๑)4 小时前
【ICLR26-金玥明-新国立】MedAgent-Pro:通过推理智能体工作流实现基于证据的多模态医疗诊断
人工智能
hqyjzsb5 小时前
企业AI人才库的搭建体系与长效运营管理方案
人工智能·学习·职场和发展·创业创新·学习方法·业界资讯·改行学it
码农小韩5 小时前
AIAgent应用开发——大模型理论基础与应用(五)
人工智能·python·提示词工程·aiagent
拔刀能留住落樱吗、5 小时前
AI 落地避坑实战(2026 最新):200 + 项目复盘,数据 + 方案 + 代码思路,少亏 50 万
人工智能
龙山云仓5 小时前
No160:AI中国故事-对话耿恭——孤城坚守与AI韧性:极端环境与信念之光
大数据·人工智能·机器学习
百锦再5 小时前
Java中的char、String、StringBuilder与StringBuffer 深度详解
java·开发语言·python·struts·kafka·tomcat·maven
Dcs5 小时前
花 200 美刀买“黑盒”?Claude Code 这波更新,把程序员当傻子了吧…
人工智能·ai编程·claude
sensen_kiss5 小时前
INT303 Coursework2 贷款批准预测模型(对整个大数据知识的应用)
大数据·机器学习·数据分析
Mr_Lucifer6 小时前
成本大幅降低、Agent效率显著提升:CodeFlicker 接入 MiniMax M2.5 与 GLM-5
人工智能·ai编程·产品