![cover](https://img-blog.csdnimg.cn/img_convert/77fcfea2a41749d7867f62f0e98b01ca.png)
机器学习——线性回归(Linear Regression)
机器学习学习笔记——2
![](https://csdnimg.cn/release/devpress/public/img/ic-book.4f347164.png)
一、线性回归
1、线性回归的作用
通过许多实验观察到的值回归统计变量的真实值。
2、线性回归的定义
线性回归属于有监督学习算法,描述一个连续型因变量和一系列自变量之间的关系。
二、线性回归四要素
1、数据
线性回归的数据即一系列自变量以及对应的因变量。
2、模型
普通形式:
其中,y为预测的因变量,w为系数,x为自变量,n为自变量的个数。
矩阵形式:
其中,m为数据的个数。
3、损失函数
普通形式:
其中,r为因变量的真实值。
矩阵形式:
4、优化算法
矩阵形式:
梯度下降:
三、 线性回归实践(sklearn)
以kaggle中数据集“Student Performance (Multiple Linear Regression)”为例
1、数据准备
直接下载使用“Student Performance (Multiple Linear Regression)”数据集,读取数据
import pandas as pd
dataset = pd.read_csv('./Student_Performance.csv') # 从当前目录下的Student_Performance.csv文件中读取数据
数据预处理,对数据进行虚拟编码,可以使得分类数据更好表示,同时删除第一个类别可以避免共线性问题
dataset_encode = pd.get_dummies(dataset, prefix="Extracurricular Activities", prefix_sep='_',
columns=["Extracurricular Activities"],
drop_first=True) # 对类别型变量"Extracurricular Activities"进行虚拟编码,同时删除第一个类别,避免共线性问题
2、训练模型
Hold-out,即划分数据集为训练集和测试集
from sklearn.model_selection import train_test_split
X = dataset_encode.drop("Performance Index", axis=1) # 删除"Performance Index"列,得到自变量X
y = dataset_encode["Performance Index"] # 取"Performance Index"列,得到因变量y
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3,
random_state=23) # 将数据集划分为训练集和测试集,测试集占比为30%,随机种子为23,保证每次划分结果相同
训练模型
from sklearn.linear_model import LinearRegression
lin_reg = LinearRegression() # 创建一个线性回归对象
lin_reg.fit(X_train, y_train) # 使用训练集拟合线性回归模型
输出参数结果
params = ['theta' + str(i) for i in range(X_train.shape[1] + 1)] # 定义参数名称列表
columns = ['intersect'] + list(X.columns.values) # 定义对应变量名称列表
thetas = [lin_reg.intercept_] + list(lin_reg.coef_) # 获取模型的参数值
data_frame = pd.DataFrame({'params': params, 'columns': columns, 'thetas': thetas})
print(data_frame)
结果如下:
params columns thetas
0 theta0 intersect -33.961731
1 theta1 Hours Studied 2.850926
2 theta2 Previous Scores 1.018645
3 theta3 Sleep Hours 0.467586
4 theta4 Sample Question Papers Practiced 0.189177
5 theta5 Extracurricular Activities_Yes 0.588272
3、评估模型
测试模型,使用均方差(MSE)进行测试
from sklearn.metrics import mean_squared_error
y_predict = lin_reg.predict(X_test) # 使用模型对测试集进行预测
MSE = mean_squared_error(y_test, y_predict) # 计算预测值和真实值之间的均方误差MSE
评估模型,使用评估模型,
是数据与拟合回归线的接近程度的统计度量。
越大表示该模型越能解释数据围绕均值的变异性。
R_square = lin_reg.score(X_test, y_test) # 计算模型在测试集上的决定系数R^2
输出MSE和 结果
print('MSE : {}\nR_square : {}\n'.format(MSE, R_square))
结果如下:
MSE : 3.995277681013032
R_square : 0.9889977346766988
绘图可视化预测值与真实值之间的关系
import matplotlib.pyplot as plt
plt.scatter(y_test, y_predict, s=5)
plt.xlabel('real value')
plt.ylabel('predict value')
plt.title('predict value vs. real value')
std_x = np.arange(10, 100, 0.1)
std_y = np.arange(10, 100, 0.1)
plt.plot(std_x, std_y, c='r') # 绘制标准线
plt.show()
结果如下:
更多推荐
所有评论(0)