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

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

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不变,但将它调的很小,精度会下降。

相关文章:

  • Dubbo分组聚合
  • 前端HTML5 +CSS3 3. HMTL基础 3 表单标签
  • 2022.9.1 SAP RFC
  • Dubbo初次使用(广播形式)
  • JSP汽车维修服务管理系统myeclipse开发SqlServer数据库bs框架java编程web网页结构
  • 【算法合集】学习算法第六天(贪心篇)
  • Nginx之正则表达式、location匹配简介及rewrite重写
  • 一文简单入门Node.js
  • 剑指offer专项 97-100笔记
  • Dubbo各种协议
  • 前端HTML5 +CSS3 2. HTML标签学习
  • 业务工人业务实体元模型-软件方法(下)第9章分析类图案例篇Part09
  • 乐观型人格分析,性格乐观的优缺点和职业发展分析
  • Dubbo之参数配置(一)
  • Dubbo之服务分组、分组聚合。
  • @angular/forms 源码解析之双向绑定
  • 【node学习】协程
  • avalon2.2的VM生成过程
  • Effective Java 笔记(一)
  • hadoop集群管理系统搭建规划说明
  • input实现文字超出省略号功能
  • Java 内存分配及垃圾回收机制初探
  • linux安装openssl、swoole等扩展的具体步骤
  • nodejs实现webservice问题总结
  • redis学习笔记(三):列表、集合、有序集合
  • Shell编程
  • Spring声明式事务管理之一:五大属性分析
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 前端技术周刊 2019-02-11 Serverless
  • 算法---两个栈实现一个队列
  • 无服务器化是企业 IT 架构的未来吗?
  • 移动端解决方案学习记录
  • 自定义函数
  • No resource identifier found for attribute,RxJava之zip操作符
  • 函数计算新功能-----支持C#函数
  • 如何用纯 CSS 创作一个货车 loader
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • #{} 和 ${}区别
  • #100天计划# 2013年9月29日
  • #define、const、typedef的差别
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (12)Linux 常见的三种进程状态
  • (rabbitmq的高级特性)消息可靠性
  • (TOJ2804)Even? Odd?
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (二)Eureka服务搭建,服务注册,服务发现
  • (二)JAVA使用POI操作excel
  • (二)丶RabbitMQ的六大核心
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (一)基于IDEA的JAVA基础1
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在