机器学习(3)-多变量线性回归&多项式回归
多维特征
在此前的单变量线性回归的基础之上增加更多的特征,构成一个多变量的回归模型,模型中的特征为(x1,x2,x3,...,xn)
θ0可以乘上系数x0,其中x0=1,以简化表达式
![]()
代价函数
同样使用平均平方误差代价函数
![]()
目标和单变量线性回归问题中一样,要找出使得代价函数最小的一系列参数。
多变量梯度下降
对代价函数求导数,使用批量梯度下降算法,得到

使用该算法,不断更新参数的值,直到代价函数趋于收敛
计算代价函数-python
计算代价函数
def computeCost(X, y, theta)
inner = np.pow(((X * theta.T) - y), 2)
return np.sum(inner) / (2 * len(X))
特征缩放
特征缩放:将不同特征的值量化到同一区间的方法,将原本由于单位不同而导致数值范围上存在较大差异的特征放到同一个数值区间内。
对没有进行特征缩放的训练集使用梯度下降法训练时,会导致迭代次数增加的情况。使用梯度下降法时,特征缩放有助于减少迭代次数,提升模型训练速度,使模型更快地收敛。
常用的特征缩放方法:最小-最大值归一化、均值归一化、标准化
标准化:z = (x - μ) / σ,μ为特征的均值,σ为标准差
可以使用sklearn提供的StandardScaler类进行数据标准化,代码如下
from sklearn.preprocessing import StandardScaler
import numpy as np
# 数据
data = np.array([[1, 2], [3, 4], [5, 6]])
# 创建StandardScaler对象
scaler = StandardScaler()
# 使用fit_transform方法标准化数据
scaled_data = scaler.fit_transform(data)
# 输出
print(scaled_data)
学习率α
梯度下降算法的每次迭代受到学习率的影响,如果学习率α过小,则达到收敛所需的迭代次数会非常高;如果学习率α过大,每次迭代可能不会减小代价函数,可能会越过局部最 小值导致无法收敛。因此需要不断调整,找到合适的学习率α。
多项式回归
线性回归并不适用于所有数据,有时我们需要曲线来适应我们的数据,比如一个二次模型或者三次模型
![]()
![]()
可以令
![]()
将多项式转换为线性回归模型求解。
在这个过程中,通常需要先观察数据,再决定准备尝试怎样的模型。在采用多项式回归模型之前,非常有必要进行特征缩放。
多项式回归-python
示例数据为随机生成
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import make_pipeline
# 生成示例数据
np.random.seed(0)
n_samples = 30
X = np.sort(np.random.rand(n_samples))
y = np.sin(2 * np.pi * X) + np.random.randn(n_samples) * 0.1
# 将X转换成二维数组
X = X[:, np.newaxis]
# 选择多项式的度数,即多项式中最高次的指数
degree = 3
# 创建多项式回归模型
model = make_pipeline(PolynomialFeatures(degree), LinearRegression())
# 拟合模型
model.fit(X, y)
# 生成预测数据
X_test = np.linspace(0, 1, 100)
X_test = X_test[:, np.newaxis]
y_pred = model.predict(X_test)
# 提取多项式系数
poly_features = model.named_steps['polynomialfeatures']
linear_regression = model.named_steps['linearregression']
# 获取多项式的系数和截距
coefficients = linear_regression.coef_
intercept = linear_regression.intercept_
# 输出多项式表达式
expression = f"{intercept:.4f}"
for i, coef in enumerate(coefficients[1:], 1):
expression += f" + ({coef:.4f}) * x^{i}"
print(f"拟合的多项式表达式: y = {expression}")
# 可视化结果
plt.scatter(X, y, color='red', label='训练数据')
plt.plot(X_test, y_pred, color='blue', label='多项式回归曲线')
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.show()
参考
通俗易懂地讲解特征缩放(Feature Scalling)_feture scalling-CSDN博客
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)