【机器学习】<刘建平Pinard老师博客学习记录>Scikit-learnPandas(NumpyMatplotlib)学习线性回归
目录
一、数据获取&问题定义:
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)学习线性回归相关推荐
- 【机器学习】<刘建平Pinard老师博客学习记录>线性回归原理
目录 一.线性回归的模型函数和损失函数: 二.线性回归的算法: 1.梯度下降法: 2.最小二乘法: 三.线性回归的推广:多项式回归 四.线性回归的推广:广义线性回归 五.线性回归的正则化: 一.线性回 ...
- 【机器学习】<刘建平Pinard老师博客学习记录>机器学习算法的随机数据生成
目录 一.Numpy生成随机数: 二.Scikit-learn随机数据生成API介绍: 三.Scikit-learn随机数据生成实例: 1.回归模型随机数据: 2.分类模型随机数据: 3.聚类模型随机 ...
- 【机器学习】<刘建平Pinard老师博客学习记录>最小二乘法
目录 一.最小二乘法的原理与解决的问题: 二.最小二乘法代数解法: 三.最小二乘法的矩阵解法: 四.最小二乘法的局限性和适用场景: 最小二乘法是用来做函数拟合或者求函数极值的方法.在机器学习,尤其是回 ...
- 【机器学习】<刘建平Pinard老师博客学习记录>梯度下降(Gradient Descent)
目录 一.梯度: 二.梯度上升和梯度下降: 三.梯度下降法算法详解: 1.梯度下降的直观解释: 2.梯度下降的相关概念: 3.梯度下降的详细算法: 3.1 梯度下降法的代数方式描述: 3.2 梯度下降 ...
- 【机器学习】<刘建平Pinard老师博客学习记录>交叉验证(Cross Validation)
交叉验证是在机器学习建立模型和验证模型参数时常用的办法.交叉验证,顾名思义,就是重复的使用数据,把得到的样本数据进行切分,组合为不同的训练集和测试集,用训练集来训练模型,用测试集来评估模型预测的好坏. ...
- 【机器学习】<刘建平Pinard老师博客学习记录>感知机原理
目录 一.感知机模型: 二.感知机模型损失函数: 三.感知机模型损失函数的优化方法: 四.感知机模型算法: 五.感知机模型的算法对偶形式: 六.小结: 感知机可以说是最古老的分类方法之一了,在1957 ...
- 刘建平Pinard的博客配套代码
刘建平Pinard的博客配套代码 http://www.cnblogs.com/pinard 刘建平Pinard 目录 机器学习基础与回归算法 机器学习分类算法 机器学习聚类算法 机器学习降维算法 机 ...
- [转载]一篇经典的求职经历博客,值得深入研究和学习
一篇经典的求职经历博客,值得深入研究和学习,感谢原创作者分享! 工作刚刚落实,论文也刚完成,终于有时间对自己的求职历程及求职经验进行总结了.应同学要求,最近准备书写系列文章"我的求职历程及经 ...
- 鄙人为啥要在博客上记录学到的技术细节?
鄙人是搞软件的,曾经因为一个偶然的机会进入了软件这一行业. 1.为啥要学技术? 学技术嘛,不外乎两个原因.一个是学以致用,另一个就是兴趣了. 学以致用:既然都搞软件了,基本的软件开发知识总得有吧,这就 ...
最新文章
- SpringBoot巧用 @Async 提升API接口并发能力
- python字符编码是什么_python3字符编码是什么?怎么用?
- WiFi CC3200模块 加速IOT物联网发展
- Linux下互斥量与条件变量详细解析
- rxjs里b = a.pipe(map(mapFn))的执行示意图
- bert 多义词_自然语言处理:Bert及其他
- matlab出错及解决办法,Linux下使用Matlab符号函数出错的解决办法
- 详解python 字符串
- Asp.net页面传值
- 「转发领抱枕」40万奖金等你来挑战!阿里云ECS Cloudbuild开发者大赛重磅开启
- MyBatis源码阅读(四) --- SqlSession的创建过程
- element-UI-tab选项卡
- [转]FactoryBean用法
- 计算机一级在线模拟试题,全国计算机等级考试一级模拟试题及答案解析
- ps图像放大后变清晰和文字模糊变清晰
- 【Code pratice】——星期一、猜年龄、合并检测、生日蜡烛
- 【​观察】做好数据到介质的连接者 新数据时代浪潮存储的行与思
- 动漫制作要学计算机吗,学习动漫制作需要掌握哪些电脑软件?
- 扬州大学计算机系导师,胡学龙
- 笔记本的结构深入分析