python利用机器学习方法建立线性回归模型
所用数据集链接:https://pan.baidu.com/s/1hygO_jr_cj-DeGjrNvsdAQ 提取码:9c9w
完整过程分4部分,所需模块库自行下载。
代码如下:
import sys
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn import linear_model
#1.定义线性回归函数
def linearmodel(data):#data:数据集
features=['x']#特征名列表
labels=['y']#标签名列表
train_data=data[:15]#取前14行为训练集
test_data=data[15:]#取剩余为测试集
model=train_model(train_data,features,labels)#训练模型
error,score=evaluate_model(model,test_data,features,labels)#模型评价,error:均方差,score:决定系数
visualize_model(model,data,features,labels,error,score)#模型可视化
#2.定义模型训练函数
def train_model(train_data,features,labels):
model=linear_model.LinearRegression()
model.fit(train_data[features],train_data[labels])
return model
#3.定义模型评价函数
def evaluate_model(model,test_data,features,labels):
error=np.mean((model.predict(test_data[features])-test_data[labels])**2)
score=model.score(test_data[features],test_data[labels])
error=("%.3f" % error[0])#保留小数点后三位
print('均方差为:',error)
score=("%.3f" % score)
print('决定系数为:',score)
coef=("%.3f" % model.coef_)
intercept=("%.3f" % model.intercept_)
if model.intercept_<0:#判断所预测截距的正负
print('预测模型为:y={}x{}'.format(str(coef),str(intercept)))
else:
print('预测模型为:y={}x+{}'.format(str(coef),str(intercept)))
return error,score
#4.定义模型可视化函数
def visualize_model(model,data,features,labels,error,score):
fig=plt.figure(figsize=(8,8),dpi=100)#创建图形框
ax=fig.add_subplot(111)#框中画一张图
ax.set_xlabel('$x$')
ax.set_ylabel('$y$')
ax.scatter(data[features],data[labels],color='b')#绘制原始数据散点图
ax.plot(data[features],model.predict(data[features]),color='r')#绘制模型预测直线
plt.show()
#定义主函数
if __name__=='__main__':
path='D:/date.csv'
data=pd.read_csv(path)#读取数据集
linearmodel(data)#线性回归
程序运行结果为:
可见,该预测模型可代表数据集中82.8%的数据。由于模型的评估与均方差和决定系数大小有关,且均方差越小越好,决定系数越接近于1越好,通过调整训练集和数据集的数据发现:
当
train_data=data[:14]
test_data=data[14:]
时预测结果较好,为: