大家好 我是小k 线性回归 顾名思义就是在回归任务中用一条线来进行拟合 对于单一特征 我们常用一次函数 y = ax + b 来进行预测 在预测前 我们需要训练集数据进行训练 在训练过程中找到最佳参数a,b得到一条最佳直线代表我们的预测 在这个例子中 我用了Avik Jain 100天机器学习的数据集 根据一个学生所学习的小时来预测他的分数 模板内容参照Avik Jain
数据集样式如下
下面我们正式进行预测
1:导入库 数据 并划分测试集和训练集
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
data = pd.read_csv(r'D:\python\100daysdata\studentscores.csv')
x = data.iloc[:,:1].values
y = data.iloc[:,1].values
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.3,random_state=0)
这些步骤和昨天的基本操作差不多
2:使用简单的回归模型来训练
from sklearn.linear_model import LinearRegression //导入线性回归模型
regression = LinearRegression() //创建线性回归模型
regression = regression.fit(x_train,y_train) //拟合训练集
主要参数说明:
fit_intercept:boolean类型 默认True,设置模型是否计算截距,false表示不适用截距
normalize:boolean类型 默认False, 设置为True,数据将在回归前进行标准化处理,这个步骤一般我们放在数据预处理的部分
copy_X:boolean类型 默认True, 如果为True,数据x将会被复制,否则会被重写
n_jobs:int类型, 默认是1,如果设为1将启动所有cpu来计算
3:进行预测
y_pred = regression.predict(x_test) //预测测试集
print(y_test)
print(y_pred) //这里我把原测试集 和预测结果打印出来做对比
[27 35 17 24 20 62 86 42 30] //原测试集
[54.9426309 57.62228196 45.56385216 49.13672025 47.35028621 67.0010607
75.48662241 55.38923941 52.70958834] //预测值
光看前两个值 感觉预测效果并不是很好 那么我们通过可视化的方法观察观察
4:可视化
可以先看看在训练集的拟合效果
plt.scatter(x_train,y_train,color = 'red') //点
plt.plot(x_train,regression.predict(x_train),color ='blue') //线
plt.show()
再看看测试集可视化的结果
plt.scatter(x_test , y_test, color = 'red')
plt.plot(x_test , regression.predict(x_test), color ='blue')
plt.show()
emmmmmm 好像拟合效果不太好 在这里我认为可能是训练集数量太小了,在后续也可以增加调整参数来提高拟合度