数据来源

澳大利亚降雨预测数据集来自于Kaggle网站:
https://www.kaggle.com/jsphyg/weather-dataset-rattle-package
该数据集该数据集包含来自许多澳大利亚气象站的大约10年的每日天气观测以及天气预报,“RainTomorrow”是要预测的目标变量,这意味着-第二天下雨了,如果当天的降雨量为1mm或更大,则此列为“是”。气象信息包括日期,城市,最低温度,最高温度,降雨量,蒸发量,阳光(一天中阳光明媚的小时数),一天中最强阵风、9am、3pm的风向和风速,一天中9am、3pm的湿度、气压、云层(云层遮盖的天空比例)、温度、当日是否下雨。
该数据集的主要任务目标是根据今日的气象信息训练分类模型,根据该模型预测澳大利亚第二天的降雨。数据总量为145460行,23列。

数据预处理

# -*- coding: utf-8 -*-
import pandas as pd
from sklearn.model_selection import train_test_split
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.naive_bayes import GaussianNB
from sklearn.ensemble import RandomForestClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.tree import export_graphviz
from sklearn.neighbors import KNeighborsClassifier
import graphviz
import pydotplus
import iopd.set_option('display.max_columns', None)
pd.set_option('display.max_colwidth', None)
pd.set_option('display.max_rows', 10)
pd.set_option('display.width', None)def preprocessing(df, index):labels = set([])for label in df[index]:labels.add(label)labels = list(labels)# print(labels)print('总类别数:', len(labels))column = df[index]df.drop(axis=1, columns=index, inplace=True)if 'RainT' in index:temp = column.map(lambda x: labels.index(x))elif index == 'Date':temp = column.map(lambda x: x[5] if x[6] == '/' else x[5:7])else:temp = column.map(lambda x: labels.index(x)+1)df.insert(0, index, temp)return dfdef get_dataset(location):      # 获取数据集df = pd.read_csv(location)# df = df[['Location', 'MinTemp', 'MaxTemp', 'Rainfall', 'Evaporation', 'Sunshine', 'WindGustDir', 'WindGustSpeed',#          'WindSpeed9am', 'WindSpeed3pm', 'Humidity9am', 'Humidity3pm', 'Pressure9am', 'Pressure3pm',#          'Cloud9am', 'Cloud3pm', 'Temp9am', 'Temp3pm', 'RainToday', 'RainTomorrow']]print(df)print(df.info())  # 查看缺失值df = df.dropna()        # 去除包含缺失值的行# 用整数标签代替字符串型数据for label in ['Location', 'WindGustDir', 'WindDir9am', 'WindDir3pm', 'Date', 'RainToday', 'RainTomorrow']:df = preprocessing(df, label)print(df)# Date列格式转换date = df['Date'].astype(float)df.drop(axis=1, columns='Date', inplace=True)df.insert(2, 'Date', date)print(df.dtypes)print(df.describe())print(df.corr()['RainTomorrow'])      # 打印相关系数矩阵# 删除相关系数过低的数据for key in df.corr()['RainTomorrow'].keys():if (df.corr()['RainTomorrow'][key] < 0.1) & (df.corr()['RainTomorrow'][key] > -0.1):df.drop(axis=1, columns=key, inplace=True)# 画相关性热力图# sns.heatmap(df.corr()[['RainToday', 'RainTomorrow']])plt.show()return dfdef test(resultset, rightset):      # 计算测试集的正确率print('预测结果为', resultset)print('正确结果为', rightset)if len(resultset) != len(rightset):print("数据集长度不同, 错误!")return 0total = len(resultset)right = 0for r1, r2 in zip(resultset, rightset):if r1 == r2:right += 1rightrate = right/totalprint(rightrate)

KNN

from tools import *
if __name__ == '__main__':df = get_dataset('E:\\X\\DATA\\weatherAUS.csv')df_list = df.values.tolist()feature = df.drop(['RainTomorrow'], axis=1).values.tolist()label = df['RainTomorrow'].values.tolist()feature_train, feature_test, label_train, label_test = train_test_split(feature, label, test_size=0.1)knn = KNeighborsClassifier()knn.fit(feature_test, label_test)result = knn.predict(feature_test)test(result, label_test)

决策树

from tools import *
if __name__ == '__main__':df = get_dataset('E:\\X\\DATA\\weatherAUS.csv')print(df)df_list = df.values.tolist()feature = df.drop(['RainTomorrow'], axis=1).values.tolist()label = df['RainTomorrow'].values.tolist()feature_train, feature_test, label_train, label_test = train_test_split(feature, label, test_size=0.1)clf = DecisionTreeClassifier(max_depth=3)clf = clf.fit(feature_train, label_train)test(clf.predict(feature_test), label_test)# 可视化dot_data = io.StringIO()export_graphviz(clf, out_file=dot_data)graph = pydotplus.graph_from_dot_data(dot_data.getvalue())graph.write_pdf("tree.pdf")

随机森林

from tools import *
if __name__ == '__main__':df = get_dataset('E:\\X\\DATA\\weatherAUS.csv')df_list = df.values.tolist()feature = df.drop(['RainTomorrow'], axis=1).values.tolist()label = df['RainTomorrow'].values.tolist()feature_train, feature_test, label_train, label_test = train_test_split(feature, label, test_size=0.1)clf = RandomForestClassifier()clf = clf.fit(feature_train, label_train)print("随机森林分类")test(clf.predict(feature_test), label_test)

贝叶斯

from tools import *
if __name__ == '__main__':df = get_dataset('E:\\X\\DATA\\weatherAUS.csv')df_list = df.values.tolist()print(df)feature = df.drop(['RainTomorrow'], axis=1).values.tolist()label = df['RainTomorrow'].values.tolist()feature_train, feature_test, label_train, label_test = train_test_split(feature, label, test_size=0.1)clf = GaussianNB()clf.fit(feature_train, label_train)test(clf.predict(feature_test), label_test)

澳大利亚降雨预测(基于四种机器学习算法)相关推荐

  1. ML之分类预测:基于sklearn库的七八种机器学习算法利用糖尿病(diabetes)数据集(8→1)实现二分类预测

    ML之分类预测:基于sklearn库的七八种机器学习算法利用糖尿病(diabetes)数据集(8→1)实现二分类预测 目录 输出结果 数据集展示 输出结果 1.k-NN 2.LoR 4.DT 5.RF ...

  2. 基于三种机器学习模型的岩爆类型预测及Python实现

    写在前面 由于代码较多,本文仅展示部分关键代码,需要代码文件和数据可以留言 然而,由于当时注释不及时,且时间久远,有些细节笔者也记不清了,代码仅供参考 0 引言 岩爆是深部岩土工程施工过程中常见的一种 ...

  3. ML之回归预测:利用13种机器学习算法对Boston(波士顿房价)数据集【13+1,506】进行回归预测(房价预测)+预测新数据得分

    ML之回归预测:利用13种机器学习算法对Boston(波士顿房价)数据集[13+1,506]进行回归预测(房价预测)+预测新数据得分 导读 本文章基于前边的一篇文章,对13种机器学习的回归模型性能比较 ...

  4. ML之回归预测:利用13种机器学习算法对Boston(波士顿房价)数据集【13+1,506】进行回归预测(房价预测)来比较各模型性能

    ML之回归预测:利用13种机器学习算法对Boston(波士顿房价)数据集[13+1,506]进行回归预测(房价预测)来比较各模型性能 导读 通过利用13种机器学习算法,分别是LiR.kNN.SVR.D ...

  5. ML之DTRFRExtraTRGBR:基于四种算法(DT、RFR、ExtraTR、GBR)对Boston(波士顿房价)数据集(506,13+1)进行价格回归预测并对比各自性能

    ML之DT&RFR&ExtraTR&GBR:基于四种算法(DT.RFR.ExtraTR.GBR)对Boston(波士顿房价)数据集(506,13+1)进行价格回归预测并对比各自 ...

  6. 机器学习算法_明确解释:4种机器学习算法

    您是涉足机器学习的数据科学家吗? 如果是,那么您应该阅读此内容. 定义,目的,流行算法和用例-全部说明 > Photo by Andy Kelly on Unsplash 机器学习已经从科幻小说 ...

  7. 10 种机器学习算法的要点(附 Python 和 R 代码)(转载)

    10 种机器学习算法的要点(附 Python 和 R 代码)(转载) from:https://zhuanlan.zhihu.com/p/25273698 前言 谷歌董事长施密特曾说过:虽然谷歌的无人 ...

  8. 想要成为数据科学家?知道这11种机器学习算法吗?

    摘要: 想要成为数据科学家?知道这十几种机器学习算法吗?赶快来了解一下吧,文中附各种算法的资源地址! 机器学习从业者都有不同的个性,虽然其中一些人会说"我是X方面的专家,X可以训练任何类型的 ...

  9. 小姐姐带你一起学:如何用Python实现7种机器学习算法(附代码)

    编译 | 林椿眄 出品 | AI科技大本营(公众号ID:rgznai100) [AI科技大本营导读]Python 被称为是最接近 AI 的语言.最近一位名叫Anna-Lena Popkes的小姐姐在G ...

最新文章

  1. 如何利用遗传算法进行自变量降维(代码部分)
  2. 使用Android studio完成”仿QQ的头像选择弹出的对话框“步骤及知识梳理
  3. escape mysql_MySQL中ESCAPE关键字的用法详解
  4. VisualGDB for Linux 安装配置
  5. Kafka集群部署详细步骤(包含zookeeper安装步骤)
  6. 测试框架之GTest
  7. Android培训翻译_使你的程序感知位置
  8. Python 之 线程
  9. VUE2)vue-devtools的安装与使用
  10. 尤金·卡巴斯基:卡巴斯基实验室调查内网遭黑客攻击事件
  11. 聆听python之父诠释python的精神和文化
  12. CenterOS7安装redis
  13. 计算机屏幕抖动怎么办,电脑显示屏画面颤抖是怎么回事?
  14. 电子邮件格式是什么,你知道电子邮件在哪里找吗
  15. mysql 中类似dateadd_MySQL查询中的DATEADD或DATE_ADD?
  16. 攻防世界WEB练习-easyupload
  17. 用深度学习LSTM炒股:对冲基金案例分析
  18. 微信小程序中发送网络请求
  19. 互联网读书-视界互联网+时代的创新与创业
  20. MSP430单片机串口控制5路PWM频率变化程序

热门文章

  1. mac 高效MacBook工作环境配置
  2. 关于spring框架,看这一篇就够了~~~
  3. micropython入门(二)硬件入门及步进电机驱动(102+A4988板)
  4. 未来,有关程序员的十个预言
  5. tim服务器拒绝发送离线文件,TIM怎么怎么给qq好友发离线文件? TIM发送离线文件的教程...
  6. GOOGLE搜索从入门到精通v3.0 from:http://www.being.org.cn/tool/google.htm
  7. 让供应链更智慧,让零售更无界
  8. java温度传感器用法_Android中使用SerialPort读取红外温度传感器数据
  9. PCB画板软件那么多,我到底该学习哪一个?
  10. Rh-RCA I,RCA120;罗丹明标记蓖麻凝集素I(RCA I,RCA120)