澳大利亚降雨预测(基于四种机器学习算法)
数据来源
澳大利亚降雨预测数据集来自于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)
澳大利亚降雨预测(基于四种机器学习算法)相关推荐
- ML之分类预测:基于sklearn库的七八种机器学习算法利用糖尿病(diabetes)数据集(8→1)实现二分类预测
ML之分类预测:基于sklearn库的七八种机器学习算法利用糖尿病(diabetes)数据集(8→1)实现二分类预测 目录 输出结果 数据集展示 输出结果 1.k-NN 2.LoR 4.DT 5.RF ...
- 基于三种机器学习模型的岩爆类型预测及Python实现
写在前面 由于代码较多,本文仅展示部分关键代码,需要代码文件和数据可以留言 然而,由于当时注释不及时,且时间久远,有些细节笔者也记不清了,代码仅供参考 0 引言 岩爆是深部岩土工程施工过程中常见的一种 ...
- ML之回归预测:利用13种机器学习算法对Boston(波士顿房价)数据集【13+1,506】进行回归预测(房价预测)+预测新数据得分
ML之回归预测:利用13种机器学习算法对Boston(波士顿房价)数据集[13+1,506]进行回归预测(房价预测)+预测新数据得分 导读 本文章基于前边的一篇文章,对13种机器学习的回归模型性能比较 ...
- ML之回归预测:利用13种机器学习算法对Boston(波士顿房价)数据集【13+1,506】进行回归预测(房价预测)来比较各模型性能
ML之回归预测:利用13种机器学习算法对Boston(波士顿房价)数据集[13+1,506]进行回归预测(房价预测)来比较各模型性能 导读 通过利用13种机器学习算法,分别是LiR.kNN.SVR.D ...
- ML之DTRFRExtraTRGBR:基于四种算法(DT、RFR、ExtraTR、GBR)对Boston(波士顿房价)数据集(506,13+1)进行价格回归预测并对比各自性能
ML之DT&RFR&ExtraTR&GBR:基于四种算法(DT.RFR.ExtraTR.GBR)对Boston(波士顿房价)数据集(506,13+1)进行价格回归预测并对比各自 ...
- 机器学习算法_明确解释:4种机器学习算法
您是涉足机器学习的数据科学家吗? 如果是,那么您应该阅读此内容. 定义,目的,流行算法和用例-全部说明 > Photo by Andy Kelly on Unsplash 机器学习已经从科幻小说 ...
- 10 种机器学习算法的要点(附 Python 和 R 代码)(转载)
10 种机器学习算法的要点(附 Python 和 R 代码)(转载) from:https://zhuanlan.zhihu.com/p/25273698 前言 谷歌董事长施密特曾说过:虽然谷歌的无人 ...
- 想要成为数据科学家?知道这11种机器学习算法吗?
摘要: 想要成为数据科学家?知道这十几种机器学习算法吗?赶快来了解一下吧,文中附各种算法的资源地址! 机器学习从业者都有不同的个性,虽然其中一些人会说"我是X方面的专家,X可以训练任何类型的 ...
- 小姐姐带你一起学:如何用Python实现7种机器学习算法(附代码)
编译 | 林椿眄 出品 | AI科技大本营(公众号ID:rgznai100) [AI科技大本营导读]Python 被称为是最接近 AI 的语言.最近一位名叫Anna-Lena Popkes的小姐姐在G ...
最新文章
- 如何利用遗传算法进行自变量降维(代码部分)
- 使用Android studio完成”仿QQ的头像选择弹出的对话框“步骤及知识梳理
- escape mysql_MySQL中ESCAPE关键字的用法详解
- VisualGDB for Linux 安装配置
- Kafka集群部署详细步骤(包含zookeeper安装步骤)
- 测试框架之GTest
- Android培训翻译_使你的程序感知位置
- Python 之 线程
- VUE2)vue-devtools的安装与使用
- 尤金·卡巴斯基:卡巴斯基实验室调查内网遭黑客攻击事件
- 聆听python之父诠释python的精神和文化
- CenterOS7安装redis
- 计算机屏幕抖动怎么办,电脑显示屏画面颤抖是怎么回事?
- 电子邮件格式是什么,你知道电子邮件在哪里找吗
- mysql 中类似dateadd_MySQL查询中的DATEADD或DATE_ADD?
- 攻防世界WEB练习-easyupload
- 用深度学习LSTM炒股:对冲基金案例分析
- 微信小程序中发送网络请求
- 互联网读书-视界互联网+时代的创新与创业
- MSP430单片机串口控制5路PWM频率变化程序
热门文章
- mac 高效MacBook工作环境配置
- 关于spring框架,看这一篇就够了~~~
- micropython入门(二)硬件入门及步进电机驱动(102+A4988板)
- 未来,有关程序员的十个预言
- tim服务器拒绝发送离线文件,TIM怎么怎么给qq好友发离线文件? TIM发送离线文件的教程...
- GOOGLE搜索从入门到精通v3.0 from:http://www.being.org.cn/tool/google.htm
- 让供应链更智慧,让零售更无界
- java温度传感器用法_Android中使用SerialPort读取红外温度传感器数据
- PCB画板软件那么多,我到底该学习哪一个?
- Rh-RCA I,RCA120;罗丹明标记蓖麻凝集素I(RCA I,RCA120)