目录

一、数据获取&问题定义:

1.数据获取:

2.问题定义:

二、整理数据:

三、使用Pandas读取数据:

1.导入依赖库:

2.使用Pandas读取函数:

四、数据准备:

1.查看数据:

2.划分训练集和测试集:

五、运行scikit-learn的线性模型:

六、模型评价:

七、交叉验证:

八、画图观察结果:


一、数据获取&问题定义:

1.数据获取:

数据集介绍:UCI Machine Learning Repository: Combined Cycle Power Plant Data Set

数据集下载: Index of /ml/machine-learning-databases/00294

2.问题定义:

里面是一个循环发电场的数据,共有9568个样本数据,每个数据有5列,分别是:AT(温度), V(压力), AP(湿度), RH(压强), PE(输出电力)。


二、整理数据:

下载后的数据可以发现是一个压缩文件,解压后可以看到里面有一个xlsx文件,我们先用excel把它打开,接着“另存为“”csv格式,保存下来,后面我们就用这个csv来运行线性回归。

打开这个csv可以发现数据已经整理好,没有非法数据,因此不需要做预处理。但是这些数据并没有归一化,也就是转化为均值0,方差1的格式。也不用我们搞,后面scikit-learn在线性回归时会先帮我们把归一化搞定。

一般情况下,我们需要对得到的数据集进行处理!!!


三、使用Pandas读取数据:

1.导入依赖库:

# 导入绘制图像的matplotlib库:
import matplotlib.pylab as plt# 能够直接现实matplotlib绘制的图片,不需要调用show()方法:
%matplotlib inline# 导入Numpy:
import numpy as np# 导入Pandas:
import pandas as pd# 导入机器学习库:
from sklearn import datasets, linear_model

%matplotlib inline这一句是IPython的魔法函数,可以在IPython编译器里直接使用,作用是内嵌画图,省略掉plt.show()这一步,直接显示图像。如果不加这一句的话,我们在画图结束之后需要加上plt.show()才可以显示图像。

2.使用Pandas读取函数:

# read_csv 里面的参数是csv在磁盘上的路径(相对路径):
data = pd.read_csv('./Folds5x2_pp.csv')# 默认展示前5行数据:
data.head()


四、数据准备:

1.查看数据:

查看数据维度:

# 查看样本格式:
data.shape

说明我们有9568个样本,每个样本有5列。

现在我们开始准备样本特征X,我们用AT, V,AP和RH这4个列作为样本特征。

# 取出特征值:
X = data[['AT', 'V', 'AP','RH']]X.head()

接着我们准备样本输出y, 我们用PE作为样本输出。

Y = data[['PE']]Y.head()

2.划分训练集和测试集:

我们把X和Y的样本组合划分成两部分,一部分是训练集,一部分是测试集,代码如下:

# 导入机器学习库的数据划分函数:
from sklearn.cross_validation import train_test_split# random_state:随机数的种子
X_train, X_test, y_train, y_test = train_test_split(X, Y, random_state=1)

random_state (随机数种子):其实就是该组随机数的编号,在需要重复试验的时候,保证得到一组一样的随机数。比如你每次都填1,其他参数一样的情况下你得到的随机数组是一样的。但填0或不填,每次都会不一样。

查看下训练集和测试集的维度:

print(X_train.shape)
print(y_train.shape)
print(X_test.shape)
print(y_test.shape)

可以看到75%的样本数据被作为训练集,25%的样本被作为测试集。满足简单交叉验证

【机器学习】<刘建平Pinard老师博客学习记录>交叉验证(Cross Validation)_故里的博客-CSDN博客交叉验证是在机器学习建立模型和验证模型参数时常用的办法。交叉验证,顾名思义,就是重复的使用数据,把得到的样本数据进行切分,组合为不同的训练集和测试集,用训练集来训练模型,用测试集来评估模型预测的好坏。在此基础上可以得到多组不同的训练集和测试集,某次训练集中的某样本在下次可能成为测试集中的样本,即所谓“交叉”。 那么什么时候才需要交叉验证呢?交叉验证用在数据不是很充足的时候。比如在我日常项目里面,对于普通适中问题,如果数据样本量小于一万条,我们就会采用交叉验证来训练优化选择...https://blog.csdn.net/weixin_52058417/article/details/122028525?spm=1001.2014.3001.5501


五、运行scikit-learn的线性模型:

用scikit-learn的线性模型来拟合我们的问题了,scikit-learn的线性回归算法使用的是最小二乘法来实现的。

# 导入机器学习库线性回归函数:
from sklearn.linear_model import LinearRegressionlinreg = LinearRegression()# 使用线性回归进行训练模型:
linreg.fit(X_train, y_train)

拟合完毕后,我们看看我们的需要的模型系数结果:

print (linreg.intercept_)
print (linreg.coef_)


六、模型评价:

我们需要评估我们的模型的好坏程度,对于线性回归来说,我们一般用均方差(Mean Squared Error, MSE)或者均方根差(Root Mean Squared Error, RMSE) 在测试集上的表现来评价模型的好坏

我们看看我们的模型的MSE和RMSE,代码如下:

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

得到了MSE或者RMSE,如果我们用其他方法得到了不同的系数,需要选择模型时,就用MSE小的时候对应的参数。

比如这次我们用AT, V,AP这3个列作为样本特征。不要RH, 输出仍然是PE。代码如下:

X = data[['AT', 'V', 'AP']]
y = data[['PE']]X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)from sklearn.linear_model import LinearRegression
linreg = LinearRegression()
linreg.fit(X_train, y_train)#模型拟合测试集
y_pred = linreg.predict(X_test)
from sklearn import metrics# 用scikit-learn计算MSE
print("MSE:",metrics.mean_squared_error(y_test, y_pred))# 用scikit-learn计算RMSE
print("RMSE:",np.sqrt(metrics.mean_squared_error(y_test, y_pred)))

可以看出,去掉RH后,模型拟合的没有加上RH的好,MSE变大了。


七、交叉验证:

我们可以通过交叉验证来持续优化模型,代码如下,我们采用10折交叉验证,即cross_val_predict中的cv参数为10:

X = data[['AT', 'V', 'AP', 'RH']]
y = data[['PE']]from sklearn.model_selection import cross_val_predict
predicted = cross_val_predict(linreg, X, y, cv=10)# 用scikit-learn计算MSE
print ("MSE:",metrics.mean_squared_error(y, predicted))# 用scikit-learn计算RMSE
print ("RMSE:",np.sqrt(metrics.mean_squared_error(y, predicted)))

可以看出,采用交叉验证模型的MSE比第六的大,主要原因是我们这里是对所有折的样本做测试集对应的预测值的MSE,而第六仅仅对25%的测试集做了MSE。两者的先决条件并不同。


八、画图观察结果:

这里画图真实值和预测值的变化关系,离中间的直线y=x直接越近的点代表预测损失越低。代码如下:

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()

以上就是用scikit-learn和pandas学习线性回归的过程,希望可以对初学者有所帮助。

【机器学习】<刘建平Pinard老师博客学习记录>Scikit-learnPandas(NumpyMatplotlib)学习线性回归相关推荐

  1. 【机器学习】<刘建平Pinard老师博客学习记录>线性回归原理

    目录 一.线性回归的模型函数和损失函数: 二.线性回归的算法: 1.梯度下降法: 2.最小二乘法: 三.线性回归的推广:多项式回归 四.线性回归的推广:广义线性回归 五.线性回归的正则化: 一.线性回 ...

  2. 【机器学习】<刘建平Pinard老师博客学习记录>机器学习算法的随机数据生成

    目录 一.Numpy生成随机数: 二.Scikit-learn随机数据生成API介绍: 三.Scikit-learn随机数据生成实例: 1.回归模型随机数据: 2.分类模型随机数据: 3.聚类模型随机 ...

  3. 【机器学习】<刘建平Pinard老师博客学习记录>最小二乘法

    目录 一.最小二乘法的原理与解决的问题: 二.最小二乘法代数解法: 三.最小二乘法的矩阵解法: 四.最小二乘法的局限性和适用场景: 最小二乘法是用来做函数拟合或者求函数极值的方法.在机器学习,尤其是回 ...

  4. 【机器学习】<刘建平Pinard老师博客学习记录>梯度下降(Gradient Descent)

    目录 一.梯度: 二.梯度上升和梯度下降: 三.梯度下降法算法详解: 1.梯度下降的直观解释: 2.梯度下降的相关概念: 3.梯度下降的详细算法: 3.1 梯度下降法的代数方式描述: 3.2 梯度下降 ...

  5. 【机器学习】<刘建平Pinard老师博客学习记录>交叉验证(Cross Validation)

    交叉验证是在机器学习建立模型和验证模型参数时常用的办法.交叉验证,顾名思义,就是重复的使用数据,把得到的样本数据进行切分,组合为不同的训练集和测试集,用训练集来训练模型,用测试集来评估模型预测的好坏. ...

  6. 【机器学习】<刘建平Pinard老师博客学习记录>感知机原理

    目录 一.感知机模型: 二.感知机模型损失函数: 三.感知机模型损失函数的优化方法: 四.感知机模型算法: 五.感知机模型的算法对偶形式: 六.小结: 感知机可以说是最古老的分类方法之一了,在1957 ...

  7. 刘建平Pinard的博客配套代码

    刘建平Pinard的博客配套代码 http://www.cnblogs.com/pinard 刘建平Pinard 目录 机器学习基础与回归算法 机器学习分类算法 机器学习聚类算法 机器学习降维算法 机 ...

  8. [转载]一篇经典的求职经历博客,值得深入研究和学习

    一篇经典的求职经历博客,值得深入研究和学习,感谢原创作者分享! 工作刚刚落实,论文也刚完成,终于有时间对自己的求职历程及求职经验进行总结了.应同学要求,最近准备书写系列文章"我的求职历程及经 ...

  9. 鄙人为啥要在博客上记录学到的技术细节?

    鄙人是搞软件的,曾经因为一个偶然的机会进入了软件这一行业. 1.为啥要学技术? 学技术嘛,不外乎两个原因.一个是学以致用,另一个就是兴趣了. 学以致用:既然都搞软件了,基本的软件开发知识总得有吧,这就 ...

最新文章

  1. SpringBoot巧用 @Async 提升API接口并发能力
  2. python字符编码是什么_python3字符编码是什么?怎么用?
  3. WiFi CC3200模块 加速IOT物联网发展
  4. Linux下互斥量与条件变量详细解析
  5. rxjs里b = a.pipe(map(mapFn))的执行示意图
  6. bert 多义词_自然语言处理:Bert及其他
  7. matlab出错及解决办法,Linux下使用Matlab符号函数出错的解决办法
  8. 详解python 字符串
  9. Asp.net页面传值
  10. 「转发领抱枕」40万奖金等你来挑战!阿里云ECS Cloudbuild开发者大赛重磅开启
  11. MyBatis源码阅读(四) --- SqlSession的创建过程
  12. element-UI-tab选项卡
  13. [转]FactoryBean用法
  14. 计算机一级在线模拟试题,全国计算机等级考试一级模拟试题及答案解析
  15. ps图像放大后变清晰和文字模糊变清晰
  16. 【Code pratice】——星期一、猜年龄、合并检测、生日蜡烛
  17. 【​观察】做好数据到介质的连接者 新数据时代浪潮存储的行与思
  18. 动漫制作要学计算机吗,学习动漫制作需要掌握哪些电脑软件?
  19. 扬州大学计算机系导师,胡学龙
  20. 笔记本的结构深入分析

热门文章

  1. 依赖、关联、聚合和组合之间区别
  2. 【leetcode】66. Plus One
  3. 汇编语言中的loop循环
  4. linux误删除文件后的恢复操作
  5. 什么是HttpClient
  6. 数据结构期末复习(十套试卷)库题
  7. 赚钱的小生意,VC对你没兴趣
  8. 【软件测试】集成测试
  9. python自动批量获取IP地址
  10. java -- IO流之字节流