机器学习之线性回归
- 1、机器学习
 - 2、线性回归
 - 2.1、梯度下降法
 
- 3、python下调用scikit-learn
 
1、机器学习

 
 
 
 
 
 
 
 
2、线性回归

 
 
 
 
 

 
 
 ####所以y可以当成我们需要的结果,根据公式可以求的y一撇的值更小,所以更接近需要的结果,所以y一撇拟合性更好
2.1、梯度下降法

 
已知:
 J = f ( ( (p ) ) ) = 3.5p 2 ^2 2-14p+14
 p i _i i = 0.5 ,  α \alpha α = 0.01
 p i + 1 _{i+1} i+1= ??
 ∵ \because ∵ 一元二次函数 f ( ( (p ) ) ) = ap 2 ^2 2-bp+c的幂函数求导公式
 f ( ( (x ) ) ) = x a ^a a ->  f ′ f\prime f′( x x x) = ax a − 1 ^{a-1} a−1
 ∵ \because ∵
 3.5p 2 ^2 2其导数为2*3.5p ( 2 − 1 ) ^{(2-1)} (2−1) = 7p
-14p其导数为-14*p ( 1 − 1 ) ^{(1-1)} (1−1)=-14
14为常数项导数为0
∵ \because ∵ 3.5p 2 ^2 2-14p+14的导数是7p-14
∴ \therefore ∴ α \alpha α δ δ p i \frac{\delta}{\delta p_i} δpiδf ( ( (p i _{i} i ) ) ) = 7p-14
∵ \because ∵ p i _i i = 0.5
∴ \therefore ∴ 代入 α \alpha α δ δ p i \frac{\delta}{\delta p_i} δpiδf ( ( (p i _{i} i ) ) )=7*0.5-14=-10.5
∴ \therefore ∴ 损失函数J = 0.5-0.01*(-10.5) = 0.605
 ∴ \therefore ∴ 损失函数梯度值为0.605
 

 
3、python下调用scikit-learn

 https://scikit-learn.org/stable/

 可以用简短的代码求解模型

 

import numpy as np
from sklearn.linear_model import LinearRegression
# 获取数据
x = [1,2,3,4,5,6,7,8,9,10]
x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
X = x.reshape(-1, 1)
y = np.array([7,9,11,13,15,17,19,21,23,25])
# 寻找a、b(y = ax + b)
lr_model = LinearRegression()
lr_model.fit(X,y)# 展示a、b
a = lr_model.coef_
b = lr_model.intercept_#打印系数a和截距b
print("系数a",a)
print("截距b",b)#对新数据进行预测
x_new = np.array([11,12])
X_new = x_new.reshape(-1, 1)
predictions = lr_model.predict(X_new)#打印预测数据
print("预测数据是:",predictions)
 

 

 
import numpy as np
from sklearn.linear_model import LinearRegression
# 获取数据
x = [1,2,3,4,5,6,7,8,9,10]
x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
X = x.reshape(-1, 1)
y = np.array([7,9,11,13,15,17,19,21,23,25])
# 寻找a、b(y = ax + b)
lr_model = LinearRegression()
lr_model.fit(X,y)# 展示a、b
a = lr_model.coef_
b = lr_model.intercept_#打印系数a和截距b
print("系数a",a)
print("截距b",b)#对新数据进行预测
x_new = np.array([0.5,1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.5,11])
X_new = x_new.reshape(-1, 1)
predictions = lr_model.predict(X_new)#打印预测数据
print("预测数据是:",predictions)from sklearn.metrics import mean_squared_error,r2_score
MSE = mean_squared_error(y,predictions)
R2 = r2_score(y,predictions)#打印均方差,r方值
print("MSE:",MSE)
print("R2:",R2)#画图对比y/ 和y可视化模型表现
from matplotlib import pyplot as plt
plt.scatter(y,predictions) 

 matplotlib绘制散点图
 
#绘制散点图import matplotlib.pyplot as plt# 生成示例数据
np.random.seed(42)
x_values = np.random.rand(100)
y_values = x_values + np.random.randn(100) * 0.1  # 绘制散点图
plt.scatter(x_values, y_values, color='blue', marker='o')  # color参数定义点的颜色,marker定义点的形状# 设置matplotlib的字体为微软雅黑,确保你的系统中已安装此字体,避免中文乱码问题
plt.rcParams['font.family'] = 'Microsoft YaHei'
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 用于正常显示中文标签
# 解决保存图像时负号'-'显示为方块的问题
plt.rcParams['axes.unicode_minus'] = False# 添加标题和标签
plt.title('散点图')  # 添加标题
plt.xlabel('X轴')  # X轴标签
plt.ylabel('Y轴')  # Y轴标签# 显示图表
plt.show()
 
多张散点图展示
#散点图多张图同时展示import matplotlib.pyplot as plt# 生成示例数据
np.random.seed(42)
x_values = np.random.rand(100)
y_values = x_values + np.random.randn(100) * 0.1# 如果需要四张图则创建一个2x2的子图布局
for i in range(1, 5):  # 因为是从1开始计数,所以要到5(包括)plt.subplot(2, 2, i)  # 2行2列的布局,当前是第i个子图plt.scatter(x_values, y_values, color='blue', marker='p') 
