python进程join会让程序线性执行_案例分析:通过调用python中的开源库,实现线性回归...

1.获取数据,定义问题

2.整理数据

数据的预处理和归一化问题.这部分数据已经被整理好了.所以就跳过了.

3.导入模块,读取数据

import matplotlib.pyplot as plt

%matplotlib inline

import numpy as np

import pandas as pd

from sklearn import datasets,linear_model

#该数据是2006年到2010年五年的数据.我读取了其中一年的数据

data = pd.read_excel("Folds5x2_pp.xlsx",sheet_name="Sheet1") #jupyter notebook工作目录下

4.准备运行算法的数据

data.head() #读取前五行数据

data.shape #查看数据的维度

x_data = data.iloc[:,:-1] #设置自变量

y_data = data.PE #设置因变量

#查看一下自变量和因变量的维度

y_data.shape

x_data.shape

这里发现y_data是Series,后面建模时,导入的数据集必须是多维数组,所以要对y_data添加一个维度

y_data = y_data[:,np.newaxis]

y_data.shape

5.划分训练集和测试集

from sklearn.cross_validation import train_test_split #导入拆分数据集的模块

x_train,x_test,y_train,y_test = train_test_split(x_data,y_data,test_size=0.2,random_state=1) #80%的训练集,20%的测试集,并设置随机种子

6.运行scikit_learn的线性模型

from sklearn.linear_model import LinearRegression #导入回归模型的包

lr = LinearRegression() #初始化模型

lr.fit(x_train,y_train) #训练模型

lr.coef_ #回归参数

lr.intercept_ #截距

7.模型评价

skleran中的模型评价指标有很多,本例用均方误差来做模型拟合评价.

数理统计中均方误差是指参数估计值与参数真值之差平方的期望值,记为MSE。

MSE是衡量“平均误差”的一种较方便的方法,MSE可以评价数据的变化程度。

MSE的值越小,说明预测模型描述实验数据具有更好的精确度。

y_pred = lr.predict(x_test) #测试模型,从测试集中得到预测的因变量

from sklearn import metrics #导入评价模型的模块

均方误差

MSE = metrics.mean_squared_error(y_test,y_pred)

均方根差

RMSE = np.sqrt(metrics.mean_squared_error(y_test,y_pred))

8.交叉验证

可以通过交叉验证来优化模型,使模型更稳定.

from sklearn.model_selection import cross_val_predict #导入交叉验证的模块

predicted = cross_val_predict(lr,x_data,y_data,cv=10) #10折交叉验证,优化预测的因变量

10折交叉验证: 将数据集分成十份,轮流将其中9份做训练1份做验证,10次的结果的均值作为对算法精度的估计.

#均方误差

MSE = metrics.mean_squared_error(y_data,predicted)

#均方根差

RMSE = np.sqrt(metrics.mean_squared_error(y_data,predicted))

这里得到的结果比之前模型评价中MSE和RMSE的要大。

原因是两次的样本量不一样,交叉验证中是对所有样本做测试集对应的预测值的MSE,而第七节中只是对20%的测试集做了MSE.

9.画图观察结果

fit,axes = plt.subplots() #画图的布局设置

axes.scatter(y_data,predicted) #画真实值与预测值的散点图

axes.plot([y_data.min(),y_data.max()],[y_data.min(),y_data.max()],'k--',lw=4) #画一条y=x的虚线

axes.set_xlabel('Measured') #横轴标签

axes.set_ylabel('predicted') #纵轴标签

plt.show() #显示图形

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值