赞
踩
房价预测,通过分析房地产市场的历史数据,如房屋大小、位置、建造年份等因素,线性回归可以帮助预测未来房价的走势。
销售额预测,企业可以利用线性回归模型来预测产品的销售额,这通常涉及到产品价格、市场营销预算、季节性因素等变量的分析。
贷款额度预测,金融机构可以使用线性回归来评估客户的信用风险,并据此决定贷款额度。
线性回归是一种利用直线方程对变量之间关系进行建模的回归分析方法。
特征值与目标值之间建立了一个关系,这个关系可以理解为线性模型 。
sklearn中, 线性回归的API在linear_model模块中
sklearn.linear_model.LinearRegression()
代码
- from sklearn.linear_model import LinearRegression
- x = [[80, 86],
- [82, 80],
- [85, 78],
- [90, 90],
- [86, 82],
- [82, 90],
- [78, 80],
- [92, 94]]
-
- y = [84.2, 80.6, 80.1, 90, 83.2, 87.6, 79.4, 93.4]
-
- estimator = LinearRegression()
-
- estimator.fit(x,y)
- print(estimator.coef_)
- estimator.predict([[100, 80]])
通过sklearn.linear_model.LinearRegression
类创建一个线性回归模型实例。这个类有许多参数可以设置,如fit_intercept
(是否计算模型的截距)和normalize
(是否对数据进行标准化处理)等。
fit
方法来训练模型。predict
方法对测试集或新数据进行预测。用来衡量机器学习模型性能的函数,损失函数可以计算预测值与真实值之间的误差(用一个实数来表示),误差越小说明模型性能越好。
但是用来衡量回归损失的时候, 不能简单的将每个点的预测误差相加。
回归问题的损失函数
- import numpy as np
- from sklearn.linear_model import LinearRegression
-
- if __name__ == '__main__':
-
-
- x = np.mat([[80, 86],
- [82, 80],
- [85, 78],
- [90, 90],
- [86, 82],
- [82, 90],
- [78, 80],
- [92, 94]])
-
- # 目标值
- y = np.mat([84.2, 80.6, 80.1, 90, 83.2, 87.6, 79.4, 93.4]).transpose()
-
-
- ones_array = np.ones([len(x), 1])
- x = np.hstack([ones_array, x])
-
-
- w = (x.transpose() * x) ** -1 * x.transpose() * y
- print('[%.1f %.1f %.1f]' % (w[0][0], w[1][0], w[2][0]))
-
- # 使用 LinearRegression
- estimator = LinearRegression(fit_intercept=True)
- estimator.fit(x, y)
- print(estimator.coef_[0])
-
- # 输出结果
- # [0.0 0.3 0.7]
- # [0. 0.3 0.7]
梯度下降法的基本概念是在一个多维空间内,通过迭代的方式逐步逼近最小值点。在每一步迭代中,都沿着当前点的梯度(即损失函数在该点的导数)方向移动一定的步长,以此来减小损失函数的值。这个过程类似于一个人在山上寻找下山的路,每次都选择当前位置最陡峭的方向向下走一步,最终会到达山底。
在机器学习中,特别是在线性回归模型中,梯度下降法通常用来最小化预测值与实际值之间的差距,这个差距通过损失函数来量化。线性回归模型的预测公式可以表示为 y = θ0 + θ1x1 + θ2x2 +... + θnxn,其中 θj 是模型参数,包括偏置项 θ0 和特征权重 θ1, θ2,..., θn。梯度下降法通过迭代更新这些参数,使得损失函数最小化。
全梯度下降算法(FGD)
每次迭代时, 使用全部样本的梯度值,计算训练集所有样本误差,对其求和再取平均值作为目标函数。权重向量沿其梯度相反的方向移动,从而使当前目标函数减少得最多。与随机梯度下降(SGD)和小批量梯度下降(MBGD)不同,FGD在每次迭代时使用整个数据集来计算梯度。
在实际应用中,FGD通常用于模型训练的优化过程。具体步骤包括初始化模型参数、计算损失函数的梯度、更新参数以及重复迭代直到满足停止条件(如梯度趋近于零、达到预设的迭代次数或损失函数变化小于某个阈值)。由于FGD在每次迭代中使用整个数据集,因此它通常能够更准确地逼近全局最小值,但也因为如此,它的计算成本相对较高,尤其在大数据集上运行时可能会非常缓慢。
随机梯度下降算法(SGD)
随机梯度下降(SGD)是机器学习和深度学习中常用的一种优化算法,它的核心在于通过随机选择数据点来计算梯度,并更新模型参数。这种方法特别适用于大规模数据集,因为它可以在不需要遍历整个数据集的情况下进行模型的迭代更新。
from sklearn.linear_model import SGDRegressor
随机平均梯度下降算法(SAG)
随机平均梯度下降(SAG)是一种改进型的随机梯度下降算法,目的是提高收敛速度并减少方差。
平均绝对误差
- from sklearn.metrics import mean_absolute_error
- mean_absolute_error(y_test,y_predict)
均方误差
- from sklearn.metrics import mean_squared_error
- mean_squared_error(y_test,y_predict)
均方根误差
RMSE 越小模型预测约准确
RMSE 是 MSE 的平方根。某些情况下比MES更有用,由于 MAE 和 RMSE 都是误差的一次方,可以将它们相互比较
案例:波士顿房价预测
- from sklearn.datasets import load_boston
- from sklearn.model_selection import train_test_split
- from sklearn.preprocessing import StandardScaler
- from sklearn.metrics import mean_squared_error
- from sklearn.linear_model import SGDRegressor
- from sklearn.linear_model import LinearRegression
-
- def linear_model1():
-
-
- data = load_boston()
-
- # 数据集划分
- x_train, x_test, y_train, y_test = train_test_split(data.data, data.target, random_state=22)
-
- # 特征工程-标准化
- transfer = StandardScaler()
- x_train = transfer.fit_transform(x_train)
- x_test = transfer.transform(x_test)
-
- # 机器学习-线性回归(正规方程)
- estimator = LinearRegression()
- estimator.fit(x_train, y_train)
-
- # 模型评估
-
- y_predict = estimator.predict(x_test)
- print("预测值为:\n", y_predict)
- print("模型中的系数为:\n", estimator.coef_)
- print("模型中的偏置为:\n", estimator.intercept_)
-
-
- # 均方误差
- error = mean_squared_error(y_test, y_predict)
- print("误差为:\n", error)
-
- return None
使用SGDRegressor
类进行线性回归训练的过程:
SGDRegressor(max_iter=1000)
创建一个随机平均梯度下降回归模型的实例。这里的max_iter=1000
表示模型在训练时最多进行1000次迭代。estimator.fit(x_train, y_train)
这一行代码的作用是用训练数据集x_train
(特征)和y_train
(标签)来训练模型。在这个过程中,模型会尝试学习数据之间的关系,以便能够对新的数据进行预测。SGDRegressor
使用随机梯度下降算法来优化平方损失函数,这是线性回归常用的损失函数。通过最小化损失函数,模型可以学习到最佳的权重系数和偏置项,从而得到一个能够较好地预测未知数据的线性模型。x_test
来评估模型的性能。通过调用estimator.predict(x_test)
可以获取模型对测试数据的预测值,进而可以通过比较预测值和真实值来计算模型的准确性和其他性能指标。- def linear_model2():
-
-
- data = load_boston()
-
- # 数据集划分
- x_train, x_test, y_train, y_test = train_test_split(data.data, data.target, random_state=22)
-
- # 特征工程-标准化
- transfer = StandardScaler()
- x_train = transfer.fit_transform(x_train)
- x_test = transfer.fit_transform(x_test)
-
-
- estimator = SGDRegressor(max_iter=1000)
- estimator.fit(x_train, y_train)
-
-
- # 获取系数等值
- y_predict = estimator.predict(x_test)
- print("预测值为:\n", y_predict)
- print("模型中的系数为:\n", estimator.coef_)
- print("模型中的偏置为:\n", estimator.intercept_)
-
-
- # 均方误差
- error = mean_squared_error(y_test, y_predict)
- print("误差为:\n", error)
-
- return None
SGDRegressor学习率
SGDRegressor(max_iter=1000,learning_rate="constant",eta0=0.1)
eta0
参数定义了学习率的起始值。在"constant"
模式下,这个值在整个训练过程中不会改变。 "invscaling"
,学习率会根据迭代次数进行调整,通常是随着迭代次数的增加而减小,这有助于模型在接近最优解时减少波动,提高收敛精度。模型的保存和加载
sklearn模型的保存和加载API import joblib
- from sklearn import svm
- from sklearn import datasets
- from joblib import dump, load
-
- # 加载数据集
- iris = datasets.load_iris()
- X, y = iris.data, iris.target
-
- # 训练模型
- clf = svm.SVC()
- clf.fit(X, y)
-
- # 保存模型
- dump(clf, 'model.joblib')
-
- # 加载模型
- clf_from_joblib = load('model.joblib')
-
- # 使用加载的模型进行预测
- print(clf_from_joblib.predict(X[0:1]))
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。