机器学习大作业_《机器学习》第一课 机器学习介绍作业

机器学习入门之线性回归:海拔高度与温度问题

任务简述:给出包含9组海拔高度和温度数据的cvs文件,利用该文件进行线性拟合,并预测不同高度的温度值。

掌握技能:练习python cvs文件处理、作图、了解简单问题的机器学习处理流程。

作业过程:

在机器学习线性回归的学习中,学习了电视广告投入与产品销售量的例子。现在通过仿照这个例子,处理海拔高度与温度关系的问题。 这个问题中给出了9个不同海拔高度对应关系的数值,以height.vs.temperature.csv文件保存。 解决问题思路: 仿照学习的案例,在这里也假设海拔高度x与温度y之间的关系是线性的,用一元一次方程表示为 y = ax + b。按照我们初中数学的知识,只需要两个点就可以确定方程的系数a和b了。这个问题给的9个点似乎多余。其实在真是的测量中存在误差的,并不能确定哪个值更准确,所以就智能找最理想的系数a和b了,理想的系数画出的方程直线,应该举例所有点的距离最近,好像最小二乘法也是这样的。 我们确定了最理想的系数,就可以利用方程得到在合理海拔范围内的高度对应的温度了。 y = ax + b,利用这个方程计算就很方便。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression


上面几个是照抄老师的。分别导入pandas(d读取cvs文件用到)、numpy(python中数学计算的基础库)、matplotlib(做图用到)、sklearn(机器学习库),as命令是起个别名,为了方便。

In [3]:
data = pd.read_csv("exercise/height.vs.temperature.csv")


读数据,简单的将例子中的文件名和文件路径替换。例子中data = pd.read_csv("data/Advertising.csv") 下面的data.head()也单步运行通过,但只显示前五行。我想全部显示,输入data,蒙对了!

data = pd.read_csv("exercise/height.vs.temperature.csv")
	height	temperature
0	0.0	12.834044
1	500.0	10.190649
2	1000.0	5.500229
3	1500.0	2.854665
4	2000.0	-0.706488
5	2500.0	-4.065323
6	3000.0	-7.127480
7	3500.0	-10.058879
8	4000.0	-13.206465

data.columns
#这个属性查看数据有几列
Index(['height', 'temperature'], dtype='object')

通过数据可视化分析数据

figure有定义图标颜色边框等多个参数,其中figsize:指定figure的宽和高,单位为英寸。

我就照例子替换掉数据,其他参数也照搬了。

plt.figure(figsize=(16, 8))
plt.scatter(data['height'], data['temperature'], c ='black')
plt.xlabel("height")
plt.ylabel("temperature")
plt.show()

0341aec95080660095773a0d0344abba.png

绘图成功!

训练线性回归模型

data['height'].values.

通过下面测试就可以知道reshape(-1,1)的作用,是将1维数组转换成矩阵的1列,其中-1不好理解,可以理解为不限行数,有程序根据数据匹配行数,与reshape(9,1)相同。

带入线性回归函数进行拟合,两个参数reg.coef_[0][0])和reg.intercept_[0]相当于方程中的系数a和b。

data['height']
data['height'].values
data['height'].values.reshape(9,1)

心得:遇到不懂问题可以多测试!

X = data['height'].values.reshape(-1,1)
y = data['temperature'].values.reshape(-1,1)

reg = LinearRegression()
reg.fit(X, y)

真正线性回归,只有这4行代码了,以上其他都是准备工作。以下其他代码是为了验证展示。

print('a = {:.5}'.format(reg.coef_[0][0]))
print('b = {:.5}'.format(reg.intercept_[0]))

print("线性模型为: Y = {:.5}X + {:.5} ".format(reg.coef_[0][0], reg.intercept_[0]))

a = -0.0065695
b = 12.719
线性模型为: Y = -0.0065695X + 12.719

可视化训练好的线性回归模型

下面的做法是可视化训练好的线性回归模型先画一张原始高度和温度对应的数据点图。
然后再同一坐标下画一条y=ax+b的曲线,x的值不变,但是y值是reg.predict(X)计算(y=ax+b)出来的。

predictions = reg.predict(X)

plt.figure(figsize=(16, 8))
plt.scatter(data['height'], data['temperature'], c ='black')
plt.plot(data['height'], predictions,c ='blue', linewidth=2)
plt.xlabel("height")
plt.ylabel("temperature")
plt.show()

e7b89334c61c19155d0aa1d543fb2cb6.png

做预测

就是预测不同高度的温度,学习的例子只有一个值,我们输入0,100,500,1000和2000米的数组,得到相应高度的预测温度。 注意在实际中超出0到4000米范围太多的话,预测误差会非常大。

predictions = reg.predict([[0],[100],[500],[1000],[2000],[3000]])
print('利用计算结果,预测在海平面温度{:.5}度、海拔100m温度{:.5}度、500m温度{:.5}度、1000m温度{:.5}度、2000m温度{:.5}度、3000m{:.5}度'.
format( predictions[0][0],predictions[1][0], predictions[2][0],predictions[3][0], predictions[4][0], predictions[5][0]))
predictions

利用计算结果,预测在海平面温度12.719度、海拔100m温度12.062度、500m温度9.4337度、1000m温度6.149度、2000m温度-0.42056度、3000m-6.9901度

Out[44]:
array([[12.71850742], [12.06155401], [ 9.43374036], [ 6.1489733 ], [-0.42056081], [-6.99009493]])

后记:说一下我走过的坑。最大的坑就是从github网站下载cvs文件,我是右键点击文件下载的,下载后不能正确读取,最后才发现是网页格式文件。

又下载那个网站的桌面软件,也是不会使用,浪费我半天时间了。最终找到了download点击才算下载成功了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值