以下笔记来自于黑马程序员十三天入门机器学习
线性回归(Linear regression)是利⽤回归⽅程(函数)对⼀个或多个⾃变量(特征值)和因变量(⽬标值)之间关系进⾏建模的⼀种分析⽅式
线性回归当中主要有两种模型, ⼀种是线性关系, 另⼀种是⾮线性关系。 在这⾥我们只能画⼀个平⾯更好去理解, 所以都⽤单个特征或两个特征举例⼦。
1.获取数据集
2.数据基本处理(该案例中省略)
3.特征⼯程(该案例中省略)
4.机器学习
5.模型评估(该案例中省略)
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]
# 实例化API
estimator = LinearRegression()
# 使⽤fit⽅法进⾏训练
estimator.fit(x,y)
estimator.coef_
estimator.predict([[100, 80]])
如何去求模型当中的W, 使得损失最⼩? (⽬的是找到最⼩损失对应的W值)
梯度下降法的基本思想可以类⽐为⼀个下⼭的过程。
假设这样⼀个场景:
⼀个⼈被困在⼭上, 需要从⼭上下来(i.e. 找到⼭的最低点, 也就是⼭⾕)。 但此时⼭上的浓雾很⼤, 导致可视度很低。因此, 下⼭的路径就⽆法确定, 他必须利⽤⾃⼰周围的信息去找到下⼭的路径。 这个时候, 他就可以利⽤梯度下降算法来帮助⾃⼰下⼭。
具体来说就是, 以他当前的所处的位置为基准, 寻找这个位置最陡峭的地⽅, 然后朝着⼭的⾼度下降的地⽅⾛, (同理, 如果我们的⽬标是上⼭, 也就是爬到⼭顶, 那么此时应该是朝着最陡峭的⽅向往上⾛) 。 然后每⾛⼀段距离, 都反复采⽤同⼀个⽅法, 最后就能成功的抵达⼭⾕。
梯度前加⼀个负号, 就意味着朝着梯度相反的⽅向前进! 我们在前⽂提到, 梯度的⽅向实际就是函数在此点上升最快的⽅向! ⽽我们需要朝着下降最快的⽅向⾛, ⾃然就是负的梯度的⽅向, 所以此处需要加上负号我们通过两个图更好理解梯度下降的过程
def linear_model3():
"""
线性回归:岭回归
:return:
"""
# 1.获取数据
data = load_boston()
# 2.数据集划分
x_train, x_test, y_train, y_test = train_test_split(data.data, data.target, random_state=22)
# 3.特征⼯程-标准化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.fit_transform(x_test)
# 4.机器学习-线性回归(岭回归)
estimator = Ridge(alpha=1)
# estimator = RidgeCV(alphas=(0.1, 1, 10))
estimator.fit(x_train, y_train)
# 5.模型评估
# 5.1 获取系数等值
y_predict = estimator.predict(x_test)
print("预测值为:\n", y_predict)
print("模型中的系数为:\n", estimator.coef_)
print("模型中的偏置为:\n", estimator.intercept_)
# 5.2 评价
# 均⽅误差
error = mean_squared_error(y_test, y_predict)
print("误差为:\n", error)
def load_dump_demo():
"""
模型保存和加载
:return:
"""
# 1.获取数据
data = load_boston()
# 2.数据集划分
x_train, x_test, y_train, y_test = train_test_split(data.data, data.target, random_state=22)
# 3.特征⼯程-标准化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.fit_transform(x_test)
# 4.机器学习-线性回归(岭回归)
# # 4.1 模型训练
# estimator = Ridge(alpha=1)
# estimator.fit(x_train, y_train)
# #
# 4.2 模型保存
# joblib.dump(estimator, "./data/test.pkl")
# 4.3 模型加载
estimator = joblib.load("./data/test.pkl")
# 5.模型评估
# 5.1 获取系数等值
y_predict = estimator.predict(x_test)
print("预测值为:\n", y_predict)
print("模型中的系数为:\n", estimator.coef_)
print("模型中的偏置为:\n", estimator.intercept_)
# 5.2 评价
# 均⽅误差
error = mean_squared_error(y_test, y_predict)
print("误差为:\n", error)