机器学习实现——线性回归

线性回归,作为机器学习入门,比较好理解,小学数学中y=kx+b到研究生阶段开始进行了深度研究,之前用两对参数确定两个未知数,现在用n对参数来估计一套近似值,不过由于未知数的数量,以及线性模型的不确定,要让线性回归达到一个预测未来还是相当有难度的。随着一些重要的模型和深度学习的引入,线性回归虽然效果不够,不过最初的思想仍然不变,用数据来预测数据,让数据给我一个更理性的判断。
我们采用scikit-learn和pandas库进行学习。
1.数据导入

# 导入相关库文件
import matplotlib.pyplot as plt
%matplotlib inline
import pandas as pd
import numpy as np
from sklearn import datasets,linear_model

#读取数据
data=pd.read_csv('...\...\learn.csv')
data.head()

如果读取成功的话,会显示csv文件里的部分数据
2.准备运行算法数据

#输出数据的维度
data.shape
#准备输入样本
x=data[['AT','V','AP','RH']]
x.head()
#准备输出样本
y=data[['PE']]
y.head()

3.划分测试集和训练集

from sklearn.cross_validation import train_test_split
x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=1)
#输出训练集和测试集的维度
print x_train.shape
print x_test.shape
print y_train.shape
print y_test.shape

4.运行sciki-learn的线性模型

from sklearn.linear_model import LinearRegression
linreg=linearRegression()
linreg.fit(x_train,y_test)
#输出模型系数
print linreg.intercept_
print linreg.cofe_

5.模型评估

#拟合测试集
y_pred=linreg.predict(X_test)
from sklearn import metrics
#用scikit-learn计算MSE,RMSE
print "MSE:",metrics.mean_squared_error(y_test,y_pred)
print "RMSE:",np.sqrt(metrics.mean_squared_error(y_test,y_pred))

#我们去掉,输入中的一类样本,测试MSE,RMSE
x=data[['AT','V','AP']]
y=data[['PE']]
x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=1)
linreg.fit(x_train,y_train)
y_pred=linreg.predict(X_test)
print "MSE:",metrics.mean_squared_error(y_test,y_pred)
print "RMSE:",np.sqrt(metrics.mean_squared_error(y_test,y_pred))

6.交叉验证

from sklearn.model_selection import cross_val_predict
predicted=cross_val_predict(linreg,X,y,cv=10)
print "MSE:",metrics.mean_squared_error(y,predicted)
print "RMSE:",np.sqrt(metrics.mean_squared_error(y,predicted))

7.画图展示结果

fig,ax=plt.subplots()
ax.scatter(y,predicted)
ax.plot([y.min(),y.max()],[y.min(),y.max()],'k--',lw=4)
ax.set_xlabel('Measured')
ax.set_ylabel('Predicted')
plt.show()

猜你喜欢

转载自blog.csdn.net/weixin_40732844/article/details/82499016