当前位置: 首页 > news >正文

在Adult数据集上使用pandas进行独热编码,之后部署Logistic Regression模型

Adult数据集

adult 数据集的任务是预测一名工人的收入是高于 50 000 美元还是低于 50 000 美元。这个数据集的特征包括工人的年龄、雇用方式(独立经营、私营企业员工、政府职员等)、教育水平、性别、每周工作时长、职业,等等。
在这里插入图片描述
这个数据集需要自己在网上下载,在百度里搜即可,其他博主已经整理好了下载的链接。

使用独热向量编码来对分类变量进行数据表示

由上一个title中的表得知,类似于性别gender、教育程度education等特征,它们都是以字符串的形式呈现的,显然无法作为机器学习模型的输入(输入应该是numPy或scipy格式的数组),因此需要进行数据预处理。数据预处理的方法是使用独热向量编码(one-hot)。独热向量很好理解,看下表即可,相当于用一位表示一个状态。
在这里插入图片描述

用到的工具:pandas.DataFrame的get_dummies方法

import pandas as pd
from IPython.display import display

# 文件中没有包含列名称的表头,因此我们传入header=None
# 然后在"names"中显式地提供列名称
data = pd.read_csv(
 "data/adult.data", header=None, index_col=False,
 names=['age', 'workclass', 'fnlwgt', 'education', 'education-num',
 'marital-status', 'occupation', 'relationship', 'race', 'gender',
 'capital-gain', 'capital-loss', 'hours-per-week', 'native-country',
 'income'])
# 为了便于说明,我们只选了其中几列
data = data[['age', 'workclass', 'education', 'gender', 'hours-per-week',
 'occupation', 'income']]
# IPython.display可以在Jupyter notebook中输出漂亮的格式
display(data.head())

在这里插入图片描述
👆首先读取数据集,输出其中几列特征。

print(data.gender.value_counts())
#使用pandas Series的value_counts函数可以显示某列的唯一值及其出现次数

👆之后我们需要检查分类变量的表示是否唯一,如male也可以表示为man,二者都代表性别为男性,需要统一。使用的是pandas.Series的values_counts方法(Series表示pandas数组的一列)。
在这里插入图片描述
接下来,使用get_dummies方法对pandas数组中的分类变量进行编码👇

print("Original features:\n", list(data.columns), "\n")
data_dummies = pd.get_dummies(data)
#使用pandas自带的get_dummies方法,对分类特征进行one-hot编码👆
print("Features after get_dummies:\n", list(data_dummies.columns))
data_dummies.head()

在这里插入图片描述
在这里插入图片描述
接下来就可以将DataFrame转化为numPy了,即准备机器学习模型的输入数据。

features = data_dummies.loc[:, 'age':'occupation_ Transport-moving']
#👆仅提取带有特征的列; ix索引已过时,可以使用loc或iloc替代,其中iloc通过数值索引
# 提取NumPy数组
X = features.values  #通过Dataframe的value方法将Dataframe数组转化为numPy数组,
#以输入到机器学习模型当中
y = data_dummies['income_ >50K'].values
#👆取标签
print("X.shape: {} y.shape: {}".format(X.shape, y.shape))

在这里插入图片描述
书中仅使用了Logistic Regression,此处再外加一个RandomForestClassifier,对比两个模型的性能。

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
logreg = LogisticRegression(max_iter=10000)
logreg.fit(X_train, y_train)
print("Train score: {:.2f}".format(logreg.score(X_train, y_train)))
print("Test score: {:.2f}".format(logreg.score(X_test, y_test)))

在这里插入图片描述

from sklearn.ensemble import RandomForestClassifier
rfc = RandomForestClassifier(n_estimators=100, max_depth=5, n_jobs=-1)
rfc.fit(X_train, y_train)
print("Train score: {:.2f}".format(rfc.score(X_train, y_train)))
print("Test score: {:.2f}".format(rfc.score(X_test, y_test)))

在这里插入图片描述
可以看到,Logistic Regression的性能要优于RandomForestClassifier,但二者在训练集和测试集上的分数都非常接近,可能两个模型都存在一定程度的欠拟合。然而,对于当前数据集,我试了下调节Logistc Regression的C参数,发现无论是调的很大,分数会保持在0.81不变,但将它调的很小,精度会下降。

相关文章:

  • 沉睡者IT - 几种网赚项目引流的方法
  • Dubbo后台管理和监控中心部署
  • Java基于JSP+Servlet的校友论坛管理系统
  • 根据int颜色值获取带透明度的颜色
  • 金仓数据库KingbaseES客户端应用参考手册--17. vacuumdb
  • 【坑货IDEA】Spring项目运行中的问题
  • 金仓数据库KingbaseES客户端编程接口指南-ado.net(3. KingbaseES 驱动在 .NET 平台的配置)
  • tf.gather_nd
  • 软考高项——计算专题
  • 东芝发布智能栅极驱动光电耦合器,简化功率器件外围电路的设计
  • 如何通过供应链数字化业务协同,赋能化工企业降本增效
  • 第七章【ADFS集成Exchang实现OWA\ECP单点登录SSO】ADFS服务器对Exchange的配置***(本栏目重点)
  • SpringBoot 整合 RabbitMQ 实现消息回调、手动确认 (二) 有图 有源码
  • Java 学习如逆水行舟,不进则退,100 本 java 电子书推荐
  • 无穷滚动加载(v-infinite-scroll)
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 【Linux系统编程】快速查找errno错误码信息
  • 【技术性】Search知识
  • fetch 从初识到应用
  • flutter的key在widget list的作用以及必要性
  • Java比较器对数组,集合排序
  • k8s 面向应用开发者的基础命令
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • MySQL几个简单SQL的优化
  • nginx 负载服务器优化
  • Python打包系统简单入门
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • 前端面试总结(at, md)
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • (¥1011)-(一千零一拾一元整)输出
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (二十四)Flask之flask-session组件
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .net 微服务 服务保护 自动重试 Polly
  • .net实现客户区延伸至至非客户区
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • @Mapper作用
  • []利用定点式具实现:文件读取,完成不同进制之间的
  • [2018][note]用于超快偏振开关和动态光束分裂的all-optical有源THz超表——
  • [C# 网络编程系列]专题六:UDP编程
  • [C#]winform部署yolov5-onnx模型
  • [C++]二叉搜索树
  • [Hive] INSERT OVERWRITE DIRECTORY要注意的问题
  • [HUBUCTF 2022 新生赛]
  • [LeetCode]284. Peeking Iterator(C++,类,暴力)
  • [leetcode]56. Merge Intervals归并区间
  • [linux]--关于进程概念(上)