机器学习(sklearn-城市气候与海洋的关系研究)

一、机器学习

  • 机器学习和AI(人工智能)之间的关联是什么?
    • 机器学习是实现人工智能的一种技术手段
  • 算法模型:
    • 特殊的对象。对象内部封装了一个还没有求出解的方程(算法)。
    • 作用:
      • 预测:预测出一个未知的值
      • 分类:将一个未知的事物归到已知的分类中
    • 预测或者分类的结果就是模型对象方程的解
  • 样本数据:

    • 组成部分:
      • 特征数据:自变量
      • 目标数据:因变量
    • 样本数据和算法模型对象之间的关联?
      • 可以将样本数据带入到算法模型中,对其内部的方程进行求解操作。一旦模型对象有解了,那么就可以实现分类或者预测的功能。
    • 训练模型:将样本数据带入到算法模型,让其模型对象有解。
  • 算法模型的分类:

    • 有监督学习:如果算法模型需要的样本数据必须要包含特征数据和目标数据
    • 无监督学习:如果算法模型需要的样本数据只包含特征数据即可
  • sklearn模块展开学习
    • 封装好了多种不同的算法模型

二、城市气候与海洋的关系研究

  实验包数据下载:提取码g9j0

   第一步:实验数据导入:

  以下实验基于jupyter编辑器做开发!

import numpy as np
import pandas as pd
from pandas import Series,DataFrame

import matplotlib.pyplot as plt

# 图表中的中文处理
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题

# 导入各个海滨城市数据
ferrara1 = pd.read_csv('./ferrara_150715.csv')
ferrara2 = pd.read_csv('./ferrara_250715.csv')
ferrara3 = pd.read_csv('./ferrara_270615.csv')
ferrara=pd.concat([ferrara1,ferrara1,ferrara1],ignore_index=True)

torino1 = pd.read_csv('./torino_150715.csv')
torino2 = pd.read_csv('./torino_250715.csv')
torino3 = pd.read_csv('./torino_270615.csv')
torino = pd.concat([torino1,torino2,torino3],ignore_index=True) 

mantova1 = pd.read_csv('./mantova_150715.csv')
mantova2 = pd.read_csv('./mantova_250715.csv')
mantova3 = pd.read_csv('./mantova_270615.csv')
mantova = pd.concat([mantova1,mantova2,mantova3],ignore_index=True) 

milano1 = pd.read_csv('./milano_150715.csv')
milano2 = pd.read_csv('./milano_250715.csv')
milano3 = pd.read_csv('./milano_270615.csv')
milano = pd.concat([milano1,milano2,milano3],ignore_index=True) 

ravenna1 = pd.read_csv('./ravenna_150715.csv')
ravenna2 = pd.read_csv('./ravenna_250715.csv')
ravenna3 = pd.read_csv('./ravenna_270615.csv')
ravenna = pd.concat([ravenna1,ravenna2,ravenna3],ignore_index=True)

asti1 = pd.read_csv('./asti_150715.csv')
asti2 = pd.read_csv('./asti_250715.csv')
asti3 = pd.read_csv('./asti_270615.csv')
asti = pd.concat([asti1,asti2,asti3],ignore_index=True)

bologna1 = pd.read_csv('./bologna_150715.csv')
bologna2 = pd.read_csv('./bologna_250715.csv')
bologna3 = pd.read_csv('./bologna_270615.csv')
bologna = pd.concat([bologna1,bologna2,bologna3],ignore_index=True)

piacenza1 = pd.read_csv('./piacenza_150715.csv')
piacenza2 = pd.read_csv('./piacenza_250715.csv')
piacenza3 = pd.read_csv('./piacenza_270615.csv')
piacenza = pd.concat([piacenza1,piacenza2,piacenza3],ignore_index=True)

cesena1 = pd.read_csv('./cesena_150715.csv')
cesena2 = pd.read_csv('./cesena_250715.csv')
cesena3 = pd.read_csv('./cesena_270615.csv')
cesena = pd.concat([cesena1,cesena2,cesena3],ignore_index=True)

faenza1 = pd.read_csv('./faenza_150715.csv')
faenza2 = pd.read_csv('./faenza_250715.csv')
faenza3 = pd.read_csv('./faenza_270615.csv')
faenza = pd.concat([faenza1,faenza2,faenza3],ignore_index=True)

# 随机查看城市cesena的前5行数据 cesena.head()

  数据展示:

  

  第二步:删除实验中的无用数据(删除列:Unnamed: 0)

# 除去没有用的列Unnamed: 0
city_list = [ferrara,torino,mantova,milano,ravenna,asti,bologna,piacenza,cesena,faenza]
for city in city_list:
    city.drop(labels="Unnamed: 0",axis=1,inplace=True)

# 查看下删除列后的新数据
cesena.head()

  

  第三步:数据提取(数据准备),获取每个城市最高温度&最远距离存放列表中

# 显示最高温度于离海远近的关系(观察多个城市)
city_max_temp = []
city_dist = []
city_list = [ferrara,torino,mantova,milano,ravenna,asti,bologna,piacenza,cesena,faenza]
for city in city_list:
    # 获取城市的最高温度
    temp = city["temp"].max()
    # 获取城市的最远距离
    dist = city["dist"].max()
    city_max_temp.append(temp)
    city_dist.append(dist)

# 查看温度数据 city_max_temp #结果>>> [32.75, 34.69, 34.18000000000001, 34.81, 32.79000000000002, 34.31, 33.850000000000016, 33.920000000000016, 32.81, 32.74000000000001] # 查看距离数据 city_dist #j结果 >>>[47, 357, 121, 250, 8, 315, 71, 200, 14, 37]

  第四步:通过matplotlib绘制散点图

# 通过采集的数据绘制散点图
plt.scatter(city_dist,city_max_temp)
# 设置横坐标标签
plt.xlabel("距离")
# 设置纵坐标标签
plt.ylabel("最高温度")
plt.title("距离和最高温度之间的关系")

  散点图结果图例:

  

三、机器学习(sklearn),结果预测

  样本集:用于对机器学习算法模型对象进行训练。样本集通常为一个DataFrame。

- 特征数据:特征数据的变化会影响目标数据的变化。通常为多列。
- 目标数据:结果。通常为一列。

  第一步:数据准备:把获取的特征数据与目标数据获取后,特征数据需要转换成二维数组的形式

# 提取样本数据
feature = city_dist  #列表形式的特征数据
target = city_max_temp #列表形式的目标数据

# 把列表形式的数据转换成np.array类型的数据
feature = np.array(feature) #np形式的特征数据
target = np.array(target) #np形式的目标数据

# 查看数据类型 得到一个一维数组
feature.shape
# 结果>>>(10,)

  第二步:通过sklearn中LinearRegression这个线性回归方程类,创建一个算法模型,实现温度预测

# 导入回归方程类
from sklearn.linear_model import LinearRegression
# 实例化算法模型对象
linner = LinearRegression()  # y = mx + b

# 模型训练
# X:二维数组的特征数据(自变量)
# y:目标数据(因变量)
linner.fit(feature.reshape(-1,1),target)

# 通过训练好的模型,预测城市距离在175距离单位时,所对应的温度结果如下
linner.predict([[175]])  # 二维数组

# 结果>>>array([33.87226813])  # 预测在175距离单位时,当前预测温度为33.87226813

四、线程回归方程(数据展示)

  通过实验预测数据,通过散点图生成线性回归方程:

# 生成0-360数值之间生成100个等差数列
x = np.linspace(0,360,num=100)
# y 目标数据(预测结果值)
y = linner.predict(x.reshape(-1,1))

# 再次生成散点图
plt.scatter(city_dist,city_max_temp)
# 多个点形成一条完整的线性回归方程
plt.scatter(x,y)
plt.xlabel('距离')
plt.ylabel('最高温度')
plt.title('距离和最高温度之间的关系')

  散点图例:

  

 

posted @ 2019-08-14 15:51  Amorphous  阅读(362)  评论(0编辑  收藏  举报