[机器学习]sklearn入门指南(2)

上一篇文章中,我们介绍了如何用sklearn训练和预测模型,以及缺失值处理,详见[机器学习]sklearn入门指南(1)

分类变量

分类变量(Categorical Variable),也称为定性变量(Qualitative Variable),是指只能取有限个数不同值的变量,这些值通常是互不相容的类别或名称。分类变量可以作为预测模型的重要特征,尤其是在涉及用户属性、产品类别等场景中。

分类变量与数值变量(Quantitative Variable)不同,后者可以在一定范围内取任意值。分类变量的值通常是离散的、无序的,表示的是事物的类型或属性,而不是数量。

在机器学习中,大多数模型只能处理数值型数据,因此需要将分类变量转换为数值型数据,这个过程称为编码(Encoding)或转换(Transformation)

分类变量的分类

  1. 名义变量(Nominal Variables):
  • 这类变量的值没有内在的顺序或排名,各个类别之间是并列关系。
  • 例子:性别(男、女)、血型(A、B、AB、O)、国籍(中国、美国、英国)。
  1. 序数变量(Ordinal Variables):
  • 序数变量的值有明确的顺序或等级,但类别之间的差异可能不相等。
  • 例子:教育程度(小学、中学、大学)、满意度调查(不满意、一般、满意)。

处理分类变量的方法

1. 丢弃分类变量

如果某些分类变量对分析结果影响不大,可以选择丢弃。

优点:快速且简单
缺点:可能会丢失有用的信息,特别是当分类变量实际上对预测结果有影响时。
方法
`pandas.DataFrame.select_dtypes` 基于列的类型来筛选列,有include和exclude两个参数,表示包括和不包括的类型
`exclude='object'`表示不包括字符串
- 选择字符串类型的数据,必须使用 object ,否则会引发 ValueError 错误
```python
drop_X_train = X_train.select_dtypes(exclude='object')
drop_X_valid = X_valid.select_dtypes(exclude='object')
```

2. 序数编码

序数编码常用于序数变量,这种方法假设类别之间存在一个顺序关系,然后为每个唯一的值分配一个不同的整数。
- 例如:“从不”(0)< “很少”(1)< “大多数日子”(2)< “每天”(3)。
在这里插入图片描述

这种假设在某些情况下是合理的,因为类别之间确实存在一个公认的排名。

对于基于树的模型(如决策树和随机森林),序数编码通常能够很好地工作。

优点:能够保留变量的顺序信息。
缺点:如果类别之间实际上没有顺序关系,序数编码可能会引入错误的假设,从而影响模型的性能。
方法

在开始序数编码之前,首先要研究数据集。

print("Unique values in 'Condition2' column in training data:", X_train['Condition2'].unique())
print("\nUnique values in 'Condition2' column in validation data:", X_valid['Condition2'].unique())

#Unique values in 'Condition2' column in training data: ['Norm' 'PosA' 'Feedr' 'PosN' 'Artery' 'RRAe']

#Unique values in 'Condition2' column in validation data: ['Norm' 'RRAn' 'RRNn' 'Artery' 'Feedr' 'PosN']

序数编码器会为训练数据中出现的每个唯一值创建相应的整数值标签。如果验证数据包含的值未出现在训练数据中,则编码器将抛出错误,因为这些值不会被分配整数。

  • 验证数据中的“Condition2”列包含值“RRAn”和“RRNn”,但这些值不会出现在训练数据中。如果尝试在 scikit-learn 中使用序数编码器,代码会抛出错误。

因此,要把验证集标签不是训练集标签子集的列删除
然后针对good_label_cols 进行序数编码

# Categorical columns in the training data
object_cols = [col for col in X_train.columns if X_train[col].dtype == "object"]

# Columns that can be safely ordinal encoded
good_label_cols = [col for col in object_cols if 
                   set(X_valid[col]).issubset(set(X_train[col]))]
        
# Problematic columns that will be dropped from the dataset
bad_label_cols = list(set(object_cols)-set(good_label_cols))
        
print('Categorical columns that will be ordinal encoded:', good_label_cols)
print('\nCategorical columns that will be dropped from the dataset:', bad_label_cols)

#Categorical columns that will be ordinal encoded: ['MSZoning', 'Street', 'LotShape', 'LandContour', 'Utilities', 'LotConfig', 'LandSlope', 'Neighborhood', 'Condition1', 'BldgType', 'HouseStyle', 'RoofStyle', 'Exterior1st', 'Exterior2nd', 'ExterQual', 'ExterCond', 'Foundation', 'Heating', 'HeatingQC', 'CentralAir', 'KitchenQual', 'PavedDrive', 'SaleType', 'SaleCondition']

#Categorical columns that will be dropped from the dataset: ['Functional', 'RoofMatl', 'Condition2']

label_X_train = X_train.drop(bad_label_cols, axis=1)
label_X_valid = X_valid.drop(bad_label_cols, axis=1)


oe = OrdinalEncoder()
oe.fit(X_train[good_label_cols])
label_X_train[good_label_cols] = pd.DataFrame(oe.transform(X_train[good_label_cols]))
label_X_valid[good_label_cols] = pd.DataFrame(oe.transform(X_valid[good_label_cols]))

3. one-hot独热编码

独热编码通过创建新列来表示原始数据中每个可能值的存在(或不存在)。
- 例如,如果原始数据集中的“颜色”是一个分类变量,包含三个类别:“红色”、“黄色”和“绿色”,那么对应的独热编码将为每个可能的值包含一个列,并且为原始数据集中的每一行包含一个行。在原始值是“红色”的地方,我们在“红色”列中放置一个1;如果原始值是“黄色”,则在“黄色”列中放置一个1,以此类推。
在这里插入图片描述

优点:独热编码不假设类别之间存在顺序关系。因此,如果分类数据中没有明确的顺序,独热编码通常会特别有效。
缺点:独热编码不适用于分类变量取值非常多的情况。当分类变量的取值非常多时,独热编码会导致维度灾难(特征空间的维度过高),引起模型训练的困难和过拟合的风险。	
方法

要用one-hot 编码,首先要查看列中非重复值的数量,如果数量太多(这里设置为>10),则不适合用one-hot编码

object_nunique = list(map(lambda col: X_train[col].nunique(), object_cols))
d = dict(zip(object_cols, object_nunique))

sorted(d.items(), key=lambda x: x[1])

low_cardinality_cols = [col for col in object_cols if X_train[col].nunique() < 10]
high_cardinality_cols = list(set(object_cols)-set(low_cardinality_cols))

print('Categorical columns that will be one-hot encoded:', low_cardinality_cols)
print('\nCategorical columns that will be dropped from the dataset:', high_cardinality_cols)
#Categorical columns that will be one-hot encoded: ['MSZoning', 'Street', 'LotShape', 'LandContour', 'Utilities', 'LotConfig', 'LandSlope', 'Condition1', 'Condition2', 'BldgType', 'HouseStyle', 'RoofStyle', 'RoofMatl', 'ExterQual', 'ExterCond', 'Foundation', 'Heating', 'HeatingQC', 'CentralAir', 'KitchenQual', 'Functional', 'PavedDrive', 'SaleType', 'SaleCondition']

#Categorical columns that will be dropped from the dataset: ['Exterior2nd', 'Exterior1st', 'Neighborhood']

OH = OneHotEncoder(handle_unknown='ignore', sparse=False)
OH.fit(X_train[low_cardinality_cols])

OH_X_train = pd.DataFrame(OH.transform(X_train[low_cardinality_cols])) # Your code here
OH_X_valid = pd.DataFrame(OH.transform(X_valid[low_cardinality_cols]))# Your code here

OH_X_train.index = X_train.index
OH_X_valid.index = X_valid.index

num_X_train = X_train.drop(object_cols,axis = 1)
num_X_valid = X_valid.drop(object_cols,axis = 1)

OH_X_train = OH_X_train + num_X_train
OH_X_valid = OH_X_valid + num_X_valid

来自Learn Tutorial Intermediate Machine Learning

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CentOS下,离线安装vscode的步骤;

前置条件&#xff1a; 1.CentOS7; 步骤&#xff1a; 1.下载vscode指定版本&#xff0c;例如&#xff1b; 例如 code-1.83.1-1696982959.el7.x86_64.rpm 2.使用下面命令&#xff1a; sudo rpm -ivh code-1.83.1-1696982959.el7.x86_64.rpm 其他&#xff1a; 卸载vscode的命…

AI一键制作圣诞帽头像丨附详细教程

我用AI换上圣诞帽头像啦~&#x1f385; 不管是搞笑表情、宠物头像还是你的自拍&#xff01;&#xff01;都能一键添加圣诞帽元素&#xff0c;毫无违和感&#xff01;&#x1f389; 详细教程在P3、P4&#xff0c;手残党也能轻松搞定&#xff01; 宝子们需要打“need”&#xff0…

基于java博网即时通讯软件的设计与实现【源码+文档+部署讲解】

目 录 1. 绪 论 1.1. 开发背景 1.2. 开发意义 2. 系统设计相关技术 2.1 Java语言 2.2 MySQL数据库 2.3 Socket 3. 系统需求分析 3.1 可行性分析 3.2 需求分析 3.3 系统流程图 3.4 非功能性需求 4. 系统设计 4.1 系统功能结构 4.2 数据库设计 5. 系统实现 5.…

智能公文写作一体机,开箱即用快速部署超便捷

在繁忙的政企事业单位中&#xff0c;时间就是生产力。公文撰写作为各类组织日常工作的核心环节&#xff0c;却常常因为传统的公文处理流程繁琐耗时而成为效率的瓶颈。如何打破这一瓶颈&#xff0c;实现高效的公文撰写&#xff0c;成为了众多单位关注的焦点。 一款即开即用的公文…

idea2024创建JavaWeb项目以及配置Tomcat详解

今天呢&#xff0c;博主的学习进度也是步入了JavaWeb&#xff0c;目前正在逐步杨帆旗航&#xff0c;迎接全新的狂潮海浪。 那么接下来就给大家出一期有关JavaWeb的配置教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正…

从零开始使用MaxKB打造本地大语言模型智能问答系统与远程交互

文章目录 前言1. 下载运行Ollama2. 安装大语言模型3. 安装Cpolar工具4. 配置公网地址5. 固定公网地址6. MaxKB 添加Olama7.创建问答应用 前言 目前大语言模型&#xff08;LLM&#xff09;已经成为了人工智能领域的一颗璀璨明星&#xff0c;从自然语言处理到智能问答系统&#…

二年级数学知识边界总结思考-下册

目录 一、背景二、过程1.数据收集和整理一、知识点二、由来三、作用和意义 2.图形的运动一、知识点二、由来三、作用和意义 3.小小设计师一、知识点二、由来三、作用和意义 4.克和千克一、知识点二、由来三、作用和意义 5.数学广角-推理一、知识点二、由来三、作用和意义 三、总…

企业数字化转型加速,现代 IT 如何用 Datadog 全面提升可观测性?

作为 Gartner 可观测平台魔力象限的领导者&#xff0c;Datadog 凭借全面的功能、直观的用户界面和强大的产品路线图赢得了全球企业的信任。 企业 IT 架构正变得日益复杂&#xff0c;从本地服务器到云端部署&#xff0c;从单体应用向微服务&#xff0c;还有容器、 Kubernetes 等…

绕组识别标签规范

有标签名称的要标记&#xff0c;没有的不用标记 需要标注的工具、器材 图像中文名称标签名称od脱模剂watering can2铁铲shovel1记号笔&#xff0c;白色着重标bluepen/whitepen6纸质标签label3钢尺scale5玻璃纤维带&#xff08;卷&#xff09;红色网格布red grid4白色网格布wh…

NPM老是无法install,timeout?npm install失败

NPM老是无法install&#xff0c;timeout&#xff1f; 尝试一下如下操作 一、 更换国内源 npm config set registry https://registry.npmmirror.com npm install或指定源install npm install pkg --registry https://registry.npmmirror.com --legacy-peer-deps如下图 二…

Unity开发哪里下载安卓Android-NDK-r21d,外加Android Studio打包实验

NDK下载方法&#xff08;是r21d,不是r21e, 不是abc, 是d版本呢) google的东西&#xff0c;居然是完全开源的 真的不是很多公司能做到&#xff0c;和那种伪搜索引擎是不同的 到底什么时候google才会开始造车 不过风险很多&#xff0c;最好不要合资&#xff0c;风险更大 Andr…

六、模型显示位置与放缩

参考文档 # https://docs.live2d.com/zh-CHS/cubism-sdk-manual/layout/ 查看 LAppLive2DManager.cpp 中的 ChangeScene 方法&#xff0c; void LAppLive2DManager::ChangeScene(Csm::csmInt32 index) {_sceneIndex index;if (DebugLogEnable){LAppPal::PrintLog("[AP…

我的JAVA-Web基础(2)

1.JDBC 防止sql注入 2.JSP JSP的基本语法 基本语法是 <% %> Java代码 <% %> 输出变量 可以转换成${变量}的EL表达式 <%! %>定义变量 JSP的基本语法包括以下几个主要部分&#xff1a; 1. 表达式&#xff08;Expression&#xff09; 表达式用于将…

VR 动感单车身心调适系统的功能与作用

如今&#xff0c;人们面临着来自各方的压力&#xff0c;国家重视国民身心健康&#xff0c;但人们在实际生活中却缺乏有效的身心调节方式。无论是久坐的白领&#xff0c;还是学业繁重的学生&#xff0c;都存在身体亚健康和心理压力大的问题。传统健身方式枯燥、心理咨询成本高且…

数据中台到底是什么?

数据中台不是一套系统&#xff0c;也不是一套产品&#xff0c;而是一种机制。在传统IT架构中&#xff0c;不同部门&#xff0c;不同业务系统和不同的数据中心会产生大量数据。这些数据如同烟囱一样是垂直划分的&#xff0c;彼此之间无法连接&#xff0c;我们也把这种数据叫做数…

AI Agent 与 AI Workflow 的区别和深度解析:从自动化到智能化的演进

一、引言 在人工智能技术快速迭代的今天&#xff0c;我们正见证着 AI 应用模式的多元化发展。 其中&#xff0c;AI Agent 和 AI Workflow 作为两种截然不同的范式&#xff0c;正在重塑我们对 AI 应用的认知。 这两种模式就像是同一枚硬币的两面 - 一个追求灵活创新&#xff…

【MySQL】7.0 入门学习(七)——MySQL基本指令:帮助、清除输入、查询等

1.0 help &#xff1f; 帮助指令&#xff0c;查询某个指令的解释、用法、说明等。详情参考博文&#xff1a; 【数据库】6.0 MySQL入门学习&#xff08;六&#xff09;——MySQL启动与停止、官方手册、文档查询 https://www.cnblogs.com/xiaofu007/p/10301005.html 2.0 在cmd命…

Refusal in Language Models Is Mediated by a Single Direction

开源代码&#xff1a;https://github.com/andyrdt/refusal_direction Abstract 会话型大语言模型针对指令遵循和安全性进行了微调&#xff0c;从而产生服从良性请求但拒绝有害请求的模型。虽然这种拒绝行为在聊天模型中普遍存在&#xff0c;但其背后的机制仍然知之甚少。在这…

Web3.0安全开发实践:探索比特币DeFi生态中的PSBT

近年来&#xff0c;部分签名比特币交易&#xff08;PSBT&#xff09;在比特币生态系统中获得了显著关注。随着如Ordinal和基于铭文的资产等创新的兴起&#xff0c;安全的多方签名和复杂交易的需求不断增加&#xff0c;这使得PSBT成为应对比特币生态不断发展中不可或缺的工具。 …

springboot483基于springboot的校园失物招领系统(论文+源码)_kaic

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统校园失物招领系统信息管理难度大&#xff0c;容错率低&am…