机器学习模型——非线性回归
创作时间:
作者:
@小白创作中心
机器学习模型——非线性回归
引用
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()
升维后,拟合的线与原数据比较符合
热门推荐
高考708分"牛娃"现身说法:学好理科的重要法宝
如何理解期权定价模型?这些模型在实际应用中有何参考价值?
非洲豪门尼日利亚队惨遭连败,世界杯前景堪忧
西安近期5个赏花好去处推荐!
汽车的重量如何衡量?怎样根据重量选择合适的汽车?
白虎穴、补阳大穴和补阴大穴:中医养生的关键穴位
在职场,讲诚信非常重要
避免这些动作错误:掌握复合训练的正确姿势秘诀
保持口腔卫生对种植牙重要吗?哪些口腔清洁习惯是好的?
八字喜忌怎么算
两室一厅的房子多少平米比较合适?
Z检验的原理与应用详解,助你轻松掌握统计分析技巧
大便干硬怎么调理
二甲双胍缓释片哪个牌子的好?医生专业解答
如何查询商家营业执照、税务登记证和个人犯罪记录
高三想要逆袭熬夜到几点
生理期饮食注意些什么
构建完善的小公司股权退出机制:法律实务与操作要点解析
什么是“五服”,为什么出了五服,就不算亲戚
2024新京报年度阅读推荐入围书单|社科经济
劳保鞋如何防臭,如何去臭
水瓶座奇怪脑回路:独立与理性的独特世界
村、庄、屯有啥区别?
至少 7 所“双一流”高校宣布本科扩招,聚焦人工智能等专业
京东买数码产品国家补贴攻略:条件、额度和申请流程全解析
C语言中malloc函数的使用详解
1月至11月期货市场数据解读与分析
股市集合竞价的规则
万方数据库如何检索论文
北大荒:发展现代农业 端牢中国饭碗