Background
机器学习是人工智能(AI)的一部分,研究如何让计算机从数据学习某种规律。通过计算机程序根据数据去优化某一个评价指标。自动的从数据发现规律,使用这些规律做出预测。根据过去去预测未来。数据挖掘是从数据中发现信息,比对有关联的信息。大数据是各种来源的大量结构化(表格文档)和非结构化的数据(图片视频)。三者之间有交集并相互独立。
监督式学习:训练数据包含输入和预期的输出
非监督式学习:训练数据只有输入,没有预期的输出
机器学习的步骤包括:
数据获取--数据清洗--特征工程--预处理--选择机器学习模型--模型训练/模型调参--模型部署
Aim
根据已知的9个不同高度测量的气温值, 利用线性回归方法得出直线公式y = ax +b,a和b的值, 然后根据直线公式预测海拔8000米的气温。
Procedure
- 导入相关python模块:a. pandas用于数据导入及整理的模块。 b. numpy用于维度数组与矩阵运算。c. matplotlib.pyplot用于画图。d. LinearRegression用于线性回归计算。
- 利用pandas.read_csv导入海拔高度与气温的.csv数据表格。
- 利用matplotlib.pyplot模块将海拔高度与气温的关系表格可视化为图表。
- 利用LinearRegression线性回归模块对海拔高度与气温的数据进行线性回归并得出线性回归得出的直线公式。
- 将线性回归的直线可视化与海拔高度与气温的关系的散点图进行对比。
- 根据线性回归直线公式预测海拔8000米的气温
Result
表1. 海拔高度与气温的关系表(前4组)
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
![70dd9561ae631d4e439b8d26932819e0.png](https://i-blog.csdnimg.cn/blog_migrate/f0a995b5dc4391366352e1bd9fb4ce81.png)
利用线性回归得出的线性模型为: Y = -0.0065695X + 12.719
其中a = -0.0065695, b = 12.719
![34016129107d243da0aa9bb5824679ce.png](https://i-blog.csdnimg.cn/blog_migrate/0d27911ff00f02e73fa119f86daaf075.png)
将海拔8000米的高度带入线性回归模型,得出气温为-39.838摄氏度。
Conclusion
根据已知9组数据和线性回归方法预测出海拔8000米时气温为-39.838摄氏度。
![5c2a630076d981920c5c47177ef42555.png](https://i-blog.csdnimg.cn/blog_migrate/7b16352d07a801f4e70deb90d6a1737b.png)
根据已知的实际测量值(见图3),在12000米内,温度与海拔高度基本为线性关系,所以可以判断线性回归模型与实际相符合。但是由于只有9组数据,数据量太小以及数据基本为低海拔高度的测量值,因此在预测时要根据对流层,平流层和高层大气划分海拔高度的预测范围,对于更高海拔的预测需要更大量的数据。
Code
# -*- coding: utf-8 -*-
"""
Created on Tue Jun 25 20:32:05 2019
@author: junru
"""
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
data = pd.read_csv("height.vs.temperature.csv")
print(data.head())
print(data.columns)
plt.figure(figsize=(8, 4))
plt.scatter(data['height'], data['temperature'], c='black')
plt.ylabel('Temerature (Celsius)')
plt.xlabel('Height (Metre)')
plt.show()
X = data['height'].values.reshape(-1,1)
y = data['temperature'].values.reshape(-1,1)
reg = LinearRegression()
print(reg.fit(X, y))
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]))
predictions = reg.predict(X)
plt.figure(figsize=(8, 4))
plt.scatter(data['height'], data['temperature'], c='black')
plt.plot(data['height'], predictions, c = 'blue', linewidth = 2)
plt.ylabel('Temerature (Celsius)')
plt.xlabel('Height (Metre)')
plt.show()
predictions = reg.predict([[8000]])
print('海拔8000米的高度,气温为{:.5}摄氏度'.format(predictions[0][0]))