机器学习模型——非线性回归
创作时间:
作者:
@小白创作中心
机器学习模型——非线性回归
引用
CSDN
1.
https://blog.csdn.net/qq_60688380/article/details/136968451
在机器学习中,非线性回归问题是一个常见的挑战。本文将介绍如何通过升维技术将非线性问题转换为线性问题,从而提高模型的预测能力。我们将通过多项式回归、深度学习中的噪音分离、矩阵乘法等方法,结合具体的Python代码示例,展示升维技术在处理非线性数据时的应用。
处理的思路:
将非线性问题转换为线性问题
方法:
升维
升维是一种常用的处理非线性问题的方法,它通过将原始数据从低维空间映射到高维空间来增强模型的表达能力。以下是升维的一些具体原理和方法:
多项式回归:这是一种常见的升维方法,通过将已有的特征进行相乘(包括特征与自身相乘),从而生成新的特征维度。例如,在一元多项式回归中,如果因变量y与自变量x的关系是非线性的,可以通过引入x的平方项、立方项等来构建新的特征,使得模型能够捕捉到数据的非线性关系。
分离噪音与有用信息:在深度学习中,升维还可以帮助分离噪音和有用的信息。通过增加维度,网络可以学习到不同特征的权重,从而提高有用信息的权重,降低噪音的权重,这有助于提取数据中的关键特征。
矩阵乘法:在某些情况下,如Embedding层,升维是通过矩阵乘法来实现的。这种方法可以将低维数据映射到高维空间,可能会放大某些特征或者将笼统的特征分开,从而改善模型的性能。
解决欠拟合问题:升维的一个主要目的是解决模型的欠拟合问题,即当模型因为考虑的因素较少而无法准确预测时,通过增加特征的复杂度来提高模型的准确率。
保持一致性:在进行升维操作时,需要确保对训练集、测试集和验证集的数据都进行相同的升维处理,以保持数据的一致性和模型的准确性。
升维里的degree设置的不易过大,否则容易造成维度灾难。
import numpy as np
import pandas as pd
# 数据范围 -3 3
X = 6 * np.random.random(100) - 3
y = 2 * X ** 2 + X + 3 + 5 * np.random.rand(100)
from sklearn.linear_model import LinearRegression
lr = LinearRegression()
lr.fit(X.reshape(-1, 1), y)
X_line = np.linspace(-3, 3, 5)
y_line = lr.predict(X_line.reshape(-1, 1))
import matplotlib.pyplot as plt
plt.scatter(X, y)
plt.plot(X_line, y_line, c='r')
plt.show()
我们可以看出,二维数据用一维直线很难去很好的拟合。所以我们进行升维
import numpy as np
import pandas as pd
# 数据范围 -3 3
X = 6 * np.random.random(100) - 3
y = 2 * X ** 2 + X + 3 + 5 * np.random.rand(100)
from sklearn.preprocessing import PolynomialFeatures
poly = PolynomialFeatures(degree=2, include_bias=False)
X_poly = poly.fit_transform(X.reshape(-1, 1))
from sklearn.linear_model import LinearRegression
lr = LinearRegression()
lr.fit(X_poly, y)
lst = [[1],
[3],
[5]]
from sklearn.preprocessing import PolynomialFeatures
poly = PolynomialFeatures(degree=2, include_bias=False)
ret = poly.fit_transform(lst)
print(ret)
# 从这个例子中我们可以看出,coef里的结果第一个时x的系数,第二个是x^2的系数
# 绘制折线图
X_line = np.linspace(-3, 3, 100)
print(lr.coef_) # 系数
print(lr.intercept_) # 偏置
y_line = X_line * lr.coef_[0] + X_line ** 2 * lr.coef_[1] + lr.intercept_ #用公式进行输出y_line的值,
import matplotlib.pyplot as plt
plt.scatter(X, y)
plt.plot(X_line, y_line, c='r')
plt.show()
升维后,拟合的线与原数据比较符合
热门推荐
C语言内存函数详解:memcpy、memmove、memset和memcmp
如何更换汽车保险杠?这些更换步骤有哪些潜在风险?
一文带你了解镜头眩光以及如何避免
医院乱收费怎么投诉最有效
【周末特稿】中国首位“世界棋王”丁立人低谷中踏上卫冕之旅
焊接机器人的应用
数据驱动决策与数据分析能力提升工作总结
诺曼底登陆中为什么奥马哈海滩伤亡最惨重?一天美军阵亡三千人
钢铁百科:Q890D钢板标准优势及材质特性介绍
127代表什么爱情暗示
怎么增强猫咪免疫力
什么时间测血糖?早晨中午还是晚上?
糖尿病人早餐新选择:专家建议的7种低糖早餐
医疗器械质量管理体系的主要内容是什么?
农村十大传统风俗 农村传统民俗习惯有哪些
《道德经》:现代生活的智慧灯塔
2025年六大视觉设计趋势:从AI到中式美学
23次打进排名赛决赛斩获14冠!丁俊晖不愧是亚洲历史第一人!
古蜀时代的青铜艺术是一面信仰的旗帜
省力杠杆和费力杠杆的区别 都是什么意思
女职工安康险:工会经费中的温暖保障
利用路由器零成本快速搭建家庭局域网存储
朱利安为何要复兴"非主流"的多神教?
NVIDIA显卡更新后被锁40帧怎么办?完整解决方案来了
高速“区间测速”是什么原理,怎么行驶不扣分不罚款,车主:知道
调理脾胃的三种运动:太极拳、散步和瑜伽
中国电镀行业发展趋势分析与投资前景研究报告(2024-2031年)
多种方式表达感谢的英语表达技巧与文化差异探讨
SSH连接NAT网络模式VirtualBox虚拟机
Excel常用快捷键大全:告别鼠标,提升工作效率