【关于时间序列的ML】项目 4 :使用机器学习预测迁移

news2025/1/24 8:21:57

  🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎

📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃

🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​

📣系列专栏 - 机器学习【ML】 自然语言处理【NLP】  深度学习【DL】

​​

 🖍foreword

✔说明⇢本人讲解主要包括Python、机器学习(ML)、深度学习(DL)、自然语言处理(NLP)等内容。

如果你对这个系列感兴趣的话,可以关注订阅哟👋

文章目录

使用机器学习预测迁移

将数据拆分为训练集和测试集

预测迁移


在本文中,我将带您完成机器学习任务的真实世界任务,以预测国家之间的人类迁移。人类迁徙是人类流动的一种,其中一次旅行涉及一个人移动以改变他们的住所。

尽可能准确地预测人类迁移对于城市规划应用、国际贸易、传染病传播、保护规划和公共决策制定非常重要。

使用机器学习预测迁移

我将通过导入所有必要的库来开始这项预测迁移的任务:

import pandas as pd
from sklearn.cross_validation import train_test_split
from sklearn import svm 
import seaborn as sns 
import matplotlib.pyplot as plt
from sklearn.metrics import mean_squared_error
import numpy as np
from sklearn.naive_bayes import GaussianNB

我在此任务中用于预测迁移的数据集可以从此处轻松下载。让我们看看数据是什么样的:我想请您注意“Measure”、“Country”和“CitizenShip”列。如果我们想要得到一个预测结果,我们需要将这些字符串值全部转换为一个整数:

data = pd.read_csv('migration_nz.csv')
data.head(10)

但首先,让我们看看“Measure”列中的唯一值: 

array(['Arrivals', 'Departures', 'Net'], dtype=object)

现在我们需要为每个唯一的字符串值赋予其唯一的整数值:如果值不多,可以使用“替换”函数:

ata['Measure'].replace("Arrivals",0,inplace=True)
data['Measure'].replace("Departures",1,inplace=True)
data['Measure'].replace("Net",2,inplace=True)

现在让我们检查是否所有内容都已正确分配:

array([0, 1, 2])

在这种情况下,我们有大约 250 个独特的国家:

data['Country'].unique()
array(['Oceania', 'Antarctica', 'American Samoa', 'Australia',
       'Cocos Islands', 'Cook Islands', 'Christmas Island', 'Fiji',
       'Micronesia', 'Guam', 'Kiribati', 'Marshall Islands',
       'Northern Mariana Islands', 'New Caledonia', 'Norfolk Island',
       'Nauru', 'Niue', 'New Zealand', 'French Polynesia',
       'Papua New Guinea', 'Pitcairn Island', 'Palau', 'Solomon Islands',
       'French Southern Territories', 'Tokelau', 'Tonga', 'Tuvalu',
       'Vanuatu', 'Wallis and Futuna', 'Samoa', 'Asia', 'Afghanistan',
       'Armenia', 'Azerbaijan', 'Bangladesh', 'Brunei Darussalam',
       'Bhutan', 'China', 'Georgia', 'Hong Kong', 'Indonesia', 'India',
       'Japan', 'Kyrgyzstan', 'Cambodia', 'North Korea', 'South Korea',
       'Kazakhstan', 'Laos', 'Sri Lanka', 'Myanmar', 'Mongolia', 'Macau',
       'Maldives', 'Malaysia', 'Nepal', 'Philippines', 'Pakistan',
       'Singapore', 'Thailand', 'Tajikistan', 'Timor-Leste',
       'Turkmenistan', 'Taiwan', 'Uzbekistan', 'Vietnam', 'Europe',
       'Andorra', 'Albania', 'Austria', 'Bosnia and Herzegovina',
       'Belgium', 'Bulgaria', 'Belarus', 'Switzerland', 'Czechoslovakia',
       'Cyprus', 'Czechia', 'East Germany', 'Germany', 'Denmark',
       'Estonia', 'Spain', 'Finland', 'Faeroe Islands', 'France', 'UK',
       'Gibraltar', 'Greenland', 'Greece', 'Croatia', 'Hungary', 'Ireland',
       'Iceland', 'Italy', 'Kosovo', 'Liechtenstein', 'Lithuania',
       'Luxembourg', 'Latvia', 'Monaco', 'Moldova', 'Montenegro',
       'Macedonia', 'Malta', 'Netherlands', 'Norway', 'Poland', 'Portugal',
       'Romania', 'Serbia', 'Russia', 'Sweden', 'Slovenia', 'Slovakia',
       'San Marino', 'USSR', 'Ukraine', 'Vatican City',
       'Yugoslavia/Serbia and Montenegro', 'Americas',
       'Antigua and Barbuda', 'Anguilla', 'Netherlands Antilles',
       'Argentina', 'Aruba', 'Barbados', 'Bermuda', 'Bolivia', 'Brazil',
       'Bahamas', 'Belize', 'Canada', 'Chile', 'Colombia', 'Costa Rica',
       'Cuba', 'Curacao', 'Dominica', 'Dominican Republic', 'Ecuador',
       'Falkland Islands', 'Grenada', 'French Guiana', 'Guadeloupe',
       'South Georgia and the South Sandwich Islands', 'Guatemala',
       'Guyana', 'Honduras', 'Haiti', 'Jamaica', 'St Kitts and Nevis',
       'Cayman Islands', 'St Lucia', 'Martinique', 'Montserrat', 'Mexico',
       'Nicaragua', 'Panama', 'Peru', 'St Pierre and Miquelon',
       'Puerto Rico', 'Paraguay', 'Suriname', 'El Salvador', 'St Maarten',
       'Turks and Caicos', 'Trinidad and Tobago',
       'US Minor Outlying Islands', 'USA', 'Uruguay',
       'St Vincent and the Grenadines', 'Venezuela',
       'British Virgin Islands', 'US Virgin Islands',
       'Africa and the Middle East', 'UAE', 'Angola', 'Burkina Faso',
       'Bahrain', 'Burundi', 'Benin', 'Botswana',
       'Democratic Republic of the Congo', 'Central African Republic',
       'Congo', "Cote d'Ivoire", 'Cameroon', 'Cape Verde', 'Djibouti',
       'Algeria', 'Egypt', 'Western Sahara', 'Eritrea', 'Ethiopia',
       'Gabon', 'Ghana', 'Gambia', 'Guinea', 'Equatorial Guinea',
       'Guinea-Bissau', 'Israel', 'British Indian Ocean Territory', 'Iraq',
       'Iran', 'Jordan', 'Kenya', 'Comoros', 'Kuwait', 'Lebanon',
       'Liberia', 'Lesotho', 'Libya', 'Morocco', 'Madagascar', 'Mali',
       'Mauritania', 'Mauritius', 'Malawi', 'Mozambique', 'Namibia',
       'Niger', 'Nigeria', 'Oman', 'Palestine', 'Qatar', 'Reunion',
       'Rwanda', 'Saudi Arabia', 'Seychelles', 'Sudan', 'St Helena',
       'Sierra Leone', 'Senegal', 'Somalia', 'South Sudan',
       'Sao Tome and Principe', 'Syria', 'Swaziland', 'Chad', 'Togo',
       'Tunisia', 'Turkey', 'Tanzania', 'Uganda', 'South Yemen', 'Yemen',
       'Mayotte', 'South Africa', 'Zambia', 'Zimbabwe', 'Not stated',
       'All countries'], dtype=object)

现在我们需要为每个唯一的字符串值分配其唯一的整数值:

data['CountryID'] = pd.factorize(data.Country)[0]
data['CitID'] = pd.factorize(data.Citizenship)[0]

现在,让我们看看是否一切正常:
现在,让我们看看是否一切正常:
data['CountryID'].unique()

array([  0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,
        13,  14,  15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,
        26,  27,  28,  29,  30,  31,  32,  33,  34,  35,  36,  37,  38,
        39,  40,  41,  42,  43,  44,  45,  46,  47,  48,  49,  50,  51,
        52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,  64,
        65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,
        78,  79,  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90,
        91,  92,  93,  94,  95,  96,  97,  98,  99, 100, 101, 102, 103,
       104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
       117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
       130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
       143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155,
       156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168,
       169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181,
       182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
       195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207,
       208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220,
       221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233,
       234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246,
       247, 248, 249, 250, 251, 252])

 另一个问题是我们有一些缺失值,让我们看看它们的数量和位置:

data.isnull().sum()
Measure         0
Country         0
Citizenship     0
Year            0
Value          72
CountryID       0
CitID           0
dtype: int64

现在,我将简单地用中值填充这些缺失值:

data["Value"].fillna(data["Value"].median(),inplace=True)

现在,让我们看看到目前为止是否一切正常:

data.isnull().sum()
Measure        0
Country        0
Citizenship    0
Year           0
Value          0
CountryID      0
CitID          0
dtype: int64

将数据拆分为训练集和测试集

现在,我将把数据分成 70% 的训练集和 30% 的测试集:

data.drop('Country', axis=1, inplace=True)
data.drop('Citizenship', axis=1, inplace=True)
from sklearn.cross_validation import train_test_split
X= data[['CountryID','Measure','Year','CitID']].as_matrix()
Y= data['Value'].as_matrix()
X_train, X_test, y_train, y_test = train_test_split(
                                  X, Y, test_size=0.3, random_state=9)

预测迁移

现在,让我们使用我们的机器学习算法预测迁移并可视化结果:

from sklearn.ensemble import RandomForestRegressor
rf = RandomForestRegressor(n_estimators=70,max_features = 3,max_depth=5,n_jobs=-1)
rf.fit(X_train ,y_train)
rf.score(X_test, y_test)
0.73654599831394985
X = data[['CountryID','Measure','Year','CitID']]
Y = data['Value']
X_train, X_test, y_train, y_test = train_test_split(
  X, Y, test_size=0.3, random_state=9)
grouped = data.groupby(['Year']).aggregate({'Value' : 'sum'})


#Growth of migration to New-Zeland by year
grouped.plot(kind='line');plt.axhline(0, color='g')
sns.plt.show()

grouped.plot(kind='bar');plt.axhline(0, color='g')
sns.plt.show()

 

import seaborn as sns
corr = data.corr()
sns.heatmap(corr, 
            xticklabels=corr.columns.values,
            yticklabels=corr.columns.values)
sns.plt.show()

 我希望您喜欢这篇基于如何预测国家间人类迁移的简单现实世界任务的文章。我希望您喜欢这篇关于使用机器学习预测迁移的文章。请随时在下面的评论部分提出您宝贵的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/105176.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【关于2022年卡塔尔世界杯】

2022卡塔尔世界杯最全面的看点和分析,相信一定有你感兴趣的一点,相信一定会有你感兴趣的,推荐点赞收藏~~ 2022年世界杯比以往任何时候都晚,因为卡塔尔太热了…… 然而,四年一度的世界杯终于……来了 今年的世界杯&am…

非零基础自学Golang 第14章 反射 14.1 反射定义

非零基础自学Golang 文章目录非零基础自学Golang第14章 反射14.1 反射定义14.1.1 反射的定义14.1.2 与其他语言的区别第14章 反射 我们常用的一个打印函数fmt.Println()可以打印任何类型的数据,但是它本身是怎么实现的呢? 解读源码可以看到&#xff0c…

人员定位系统如何实现对人、车、物的安全管控?

人员定位系统是采用物联网设计理念,通过结合定位基站、视频监控、人脸抓拍、巡更、门禁、道闸、梯控等系统,对管控区域工作人员、访客、巡检人员进行精细化、规范化、智能化理。 智慧安全的概念随着物联网技术的发展逐渐成为发展趋势,人员定位…

【Python机器学习】卷积神经网络Vgg19模型预测动物类别实战(附源码和数据集)

需要源码和数据集请点赞关注收藏后评论区留言私信~~~ 典型神经网络 在深度学习的发展过程中,出现了很多经典的卷积神经网络,它们对深度学习的学术研究和工业生产斗起到了促进的作用,如VGG ResNet Inception DenseNet等等,很多实际…

偷偷告诉你!与其辞职,不如用Python做月入过万的副业兼职

我想辞职! 这是不是当下的你?在这个疫情当下的时代,许多打工人都有过这么一个想法,或许是因为工作待遇、亦或许是其他原因,但是却仍然屹立在工位上,有的甚至天天喊辞职,月月拿满勤。这是为什么…

阿里大牛解析微服务架构:Docker,Spring全家桶,分布式,数据库

前言 微服务架构(Microservice Architecture)是一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦。你可以将其看作是在架构层次而非获取服务的类上应用很多SOLID原则。微服务架构是个很有趣的概念,它的…

【愚公系列】2022年12月 使用Jenkins实现程序的自动化发布

文章目录前言一、使用Jenkins实现程序的自动化发布1.安装Jenkins二、安装Gitee插件前言 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进…

如何用 Prometheus 和 Grafana 实现集群的监控预警

在读写、查询等高并发场景中,了解资源的使用情况能快速定位性能的瓶颈所在。本教程提供对多(或单)服务器及 DolphinDB 高可用集群(或单节点)资源的监控、告警、预警方案。本教程使用开源软件 Prometheus, Grafana 及对…

Git实战(四)| Git分支管理实操,搞定在线合并和本地合并

类似于SVN这种集中式版本管理,三年前刚来上海工作时候,在华为驻场上班,华为用的就是SVN,印象最深的就是那个小乌龟的图标;后来到外面工作,渐渐发现用Git的非常多,慢慢学习了解发现Git这种分布式…

5年Crud的我,啃完这份Java王者级核心宝典,成功入职阿里(P7)

我有话要说,请仔细看完 我发现一个现象,很多开发5年的程序员仍然停留在crud的阶段,这是什么原因?最主要的原因就是基础很差,尤其对于JVM和并发编程这方面掌握的比较差,而JVM和并发编程就是非常非常重要的基…

40问 深度挖掘Kafka,你能答上几个?

Kafka最初是由Linkedin公司开发的,是一个分布式的、可扩展的、容错的、支持分区的(Partition)、多副本的(replica)、基于Zookeeper框架的发布-订阅消息系统,Kafka适合离线和在线消息消费。它是分布式应用系…

SQL基础——集合运算

集合运算前言思维导图表的加减法表的加法——UNION(并集)代码示例7.1 创建表Product2代码示例7.2 将数据插入到表Product2中(MYSQL)代码示例7.3 使用UNION对表进行加法运算包含重复行的集合运算——ALL选项代码示例7.5 保留重复行…

自动机器学习-auto-sklearn

1、前言 自动机器学习(AutoML) 旨在通过让一些通用步骤 (如数据预处理、模型选择和调整超参数) 自动化,来简化机器学习中生成模型的过程。AutoML是指尽量不通过人来设定超参数,而是使用某种学习机制,来调节这些超参数…

阿里微服务架构到底多牛逼:深入解析Apache Dubbo与实战

本书的由来 在Apache Dubbo (以下简称Dubbo)重新开源之前,Dubbo已经被很多公司广泛用于生产环境并获得了良好的反馈,很多公司内部也会建立私有分支自己维护,其中Dubbox 就是基于Dubbo分支进行扩展并二次维护的。重新开源后,社区维…

【ESXi 7.x内部升级】ESXi 升级 —— 小版本升级(7.X或8.X版本内升级)

目录4. 小版本升级(7.X或8.X版本内升级)4.1 示例 — 使用 vSphere Lifecycle Manager升级 ESXi目标:将 VMware ESXi 7.0 U2e 升级为 7.0 U3f(1)在vSphere Client 中查看需要升级的 ESXi 版本(2)…

【微信篇】PC端微信文件夹里的“微信号“

【微信篇】PC端微信文件夹里的"微信号" 更新记录最敷衍的软件一微信!!!—【蘇小沐】 文章目录【微信篇】PC端微信文件夹里的"微信号"1.实验环境PC端微信文件夹里的"微信号"总结1.实验环境 系统版本Windows 1…

深度学习入门(六十四)循环神经网络——编码器-解码器架构

深度学习入门(六十四)循环神经网络——编码器-解码器架构前言循环神经网络——编码器-解码器架构课件重新考察CNN重新考察RNN编码器-解码器架构总结教材1 编码器2 解码器3 合并编码器和解码器4 训练模型5 小结参考文献前言 核心内容来自博客链接1博客连…

分布式任务调度 - PowerJob

一、简介 1、介绍 PowerJob(原OhMyScheduler)是全新一代分布式任务调度与计算框架,其主要功能特性如下: 使用简单:提供前端Web界面,允许开发者可视化地完成调度任务的管理(增、删、改、查&am…

数据库原理及MySQL应用 | 约束

约束是保证数据完整性的一种数据库对象,按约束作用不同,分为七种。 约束从字面上来看就是受到限制,它是附加在表上,通过限制列中、行中、表之间数据来保证数据完整性的一种数据库对象。 在MySQL中,有多种约束&#xf…

设计模式原则 - 开闭原则(五)

开闭原则一 官方定义基本介绍二 案例演示普通实现方式案例分析开闭原则实现案例分析三 注意事项一 官方定义 开闭原则( Open Close Principle ),又称为OCP原则,他的官方定义如下: Software entities like classes,modu…