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:]

时预测结果较好,为:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值