DatawhaleAI夏令营第三期机器学习用户新增预测挑战赛baseline新手教程

本教程会带领大家项目制学习,由浅入深,逐渐进阶。从竞赛通用流程与跑通最简的Baseline,到深入各个竞赛环节,精读Baseline与进阶实践技巧的学习。
千里之行,始于足下,从这里,开启你的 AI 学习之旅吧!
—— Datawhale贡献者团队

用户新增预测挑战赛:
https://challenge.xfyun.cn/topic/info?type=subscriber-addition-prediction&ch=ymfk4uU
举办方:科大讯飞
下载数据
提交结果

点击启动环境
在这里插入图片描述
点击进入环境
点击一键运行全部代码
得到结果
右键该文件下载文件到讯飞平台提交

# 导入库
import pandas as pd
import numpy as np
from sklearn.tree import DecisionTreeClassifier#决策树模型# 读取训练集和测试集文件
train_data = pd.read_csv('用户新增预测挑战赛公开数据/train.csv')
test_data = pd.read_csv('用户新增预测挑战赛公开数据/test.csv')# 提取udmap特征,人工进行onehot
#定义udmap_onethot()函数:该函数用于对udmap特征进行人工的one-hot编码。首先创建一个长度为9的全零向量v,然后根据输入的d的值进行判断,如果值为'unknown',则直接返回全零向量。如果值不为'unknown',则通过eval()函数将字符串转换成字典对象d,然后遍历数字1到9,检查字典中是否包含键名为'key1'、'key2'、...、'key9'的元素,如果存在,则将对应的值赋给向量v的相应位置(索引为i-1),最后返回得到的向量v。
def udmap_onethot(d):v = np.zeros(9)if d == 'unknown':return vd = eval(d)for i in range(1, 10):if 'key' + str(i) in d:v[i-1] = d['key' + str(i)]return v
#对udmap特征进行one-hot编码:通过apply()方法将udmap_onethot()函数应用到train_data['udmap']和test_data['udmap']上,将返回的数组垂直堆叠成DataFrame对象train_udmap_df和test_udmap_df,然后为这两个DataFrame设置列名。
train_udmap_df = pd.DataFrame(np.vstack(train_data['udmap'].apply(udmap_onethot)))
test_udmap_df = pd.DataFrame(np.vstack(test_data['udmap'].apply(udmap_onethot)))
train_udmap_df.columns = ['key' + str(i) for i in range(1, 10)]
test_udmap_df.columns = ['key' + str(i) for i in range(1, 10)]# 编码udmap是否为空
train_data['udmap_isunknown'] = (train_data['udmap'] == 'unknown').astype(int)
test_data['udmap_isunknown'] = (test_data['udmap'] == 'unknown').astype(int)# udmap特征和原始数据拼接
#通过使用.concat()函数将train_udmap_df和test_udmap_df与原始数据集train_data和test_data进行列拼接。
train_data = pd.concat([train_data, train_udmap_df], axis=1)
test_data = pd.concat([test_data, test_udmap_df], axis=1)# 提取eid的频次特征
# 使用value_counts()函数统计train_data['eid']中每个元素的出现次数,并通过map()函数将结果映射到对应的train_data['eid_freq']和test_data['eid_freq']中。
train_data['eid_freq'] = train_data['eid'].map(train_data['eid'].value_counts())
test_data['eid_freq'] = test_data['eid'].map(train_data['eid'].value_counts())# 提取eid的标签特征
# 使用groupby()函数根据eid对train_data进行分组,然后计算每个分组中target列的均值,并通过map()函数将结果映射到对应的train_data['eid_mean']和test_data['eid_mean']中。
train_data['eid_mean'] = train_data['eid'].map(train_data.groupby('eid')['target'].mean())
test_data['eid_mean'] = test_data['eid'].map(train_data.groupby('eid')['target'].mean())# 提取时间戳
# 将train_data['common_ts']和test_data['common_ts']的数值类型转换为时间戳类型,指定时间单位为毫秒。然后使用.dt.hour将时间戳转换为小时数,并将结果存储在train_data['common_ts_hour']和test_data['common_ts_hour']中。
train_data['common_ts'] = pd.to_datetime(train_data['common_ts'], unit='ms')
test_data['common_ts'] = pd.to_datetime(test_data['common_ts'], unit='ms')
train_data['common_ts_hour'] = train_data['common_ts'].dt.hour
test_data['common_ts_hour'] = test_data['common_ts'].dt.hour# 加载决策树模型进行训练
# 创建一个DecisionTreeClassifier分类器对象clf,使用fit()方法将训练集的特征列(去除不需要的列)与目标列作为输入进行模型训练。
clf = DecisionTreeClassifier()
clf.fit(train_data.drop(['udmap', 'common_ts', 'uuid', 'target'], axis=1),train_data['target']
)# 对测试集进行预测,将submit.csv在比赛页面提交
# 使用已训练好的分类器clf对测试集的特征列(去除不需要的列)进行预测,并生成包含预测结果的DataFrame对象。最后将预测结果保存为CSV文件submit.csv,并包括uuid和target两列。
pd.DataFrame({'uuid': test_data['uuid'],'target': clf.predict(test_data.drop(['udmap', 'common_ts', 'uuid'], axis=1))
}).to_csv('submit.csv', index=None)

Q&A

  • 如果将submit.csv提交到讯飞比赛页面,会有多少的分数?
  • 我提交了的成绩是0.62686
  • 代码中如何对udmp进行了人工的onehot?
  • 代码中通过自定义的udmap_onethot()函数对udmap进行了人工的one-hot编码。以下是udmap_onethot()函数的具体实现步骤:

1、创建长度为9的全零向量v,用于存储编码后的结果。
2、判断输入的d的值是否为’unknown’,如果是,则直接返回全零向量v。
3、如果d的值不是’unknown’,则将字符串形式的字典对象转换成实际的字典对象,可以使用eval()函数来实现这一转换。
4、遍历数字1到9(代表one-hot编码的9个类别),检查字典对象d中是否包含键名为’key1’、‘key2’、…、‘key9’的元素。
5、对于每个数字i,如果字典对象d中存在键名为’key’+str(i)的元素,则将该元素的值赋给向量v的第i-1个位置(索引为i-1)。
6、最后返回编码后得到的向量v。
通过调用udmap_onethot()函数,并将其应用到训练集和测试集的udmap列上,可以得到经过人工one-hot编码后的特征矩阵。

datawhale一位大佬的baseline讲解可以看看哦
baseline视频讲解

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

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

相关文章

python——案例17:判断某年是否是闰年

案例17:判断某年是否是闰年 判断依据:闰年就是能被400整除,或者能被4整除的年份numint(input(输入年份:))if num%1000: if num%4000: #整百年份的判断print("%s年是闰年"%num) #…

java基础面试

Hashmap和Treemap的区别 1、HashMap无序,TreeMap有序。都不是线程安全的。 2、HashMap覆盖了equals()方法和hashcode()方法,这使得HashMap中两个相等的映射返回相同的哈希值;TreeMap则是实现了…

rust学习-json的序列化和反序列化

由于 serde 库默认使用 JSON 格式进行序列化和反序列化 因此程序将使用 JSON 格式对数据进行序列化和反序列化 社区为 Serde 实现的部分数据格式列表: JSON:广泛使用的 JavaScript 对象符号,用于许多 HTTP APIPostcard:no_std 和嵌入式系统友好的紧凑二进制格式。CBOR:用…

容器虚拟化基础之NameSpace

“只想从这无边的寂寞中逃出来。” 一、什么是虚拟化、容器化? 物理机:实际的服务器或者计算机。 这是相对于虚拟机而言的对实体计算机的称呼,物理机提供虚拟机以硬件环境,有时候也称为"宿主"或"寄主"。 虚拟机: 指通过软…

nlohmann json:通过for begin/end 遍历object和array

nlohmann json:通过for遍历object和array_风静如云的博客-CSDN博客 介绍了通过for基于元素迭代的方式进行遍历。 还可以通过begin/end迭代器对object/array进行遍历: #include <iostream> #include <nlohmann/json.hpp> using namespace std; using json = nlo…

JDK、JRE、JVM:揭秘Java的关键三者关系

文章目录 JDK&#xff1a;Java开发工具包JRE&#xff1a;Java运行环境JVM&#xff1a;Java虚拟机关系概述 案例示例&#xff1a;Hello World结语 在Java世界中&#xff0c;你可能经常听到JDK、JRE和JVM这几个概念&#xff0c;它们分别代表了Java开发工具包、Java运行环境和Java…

Java类型转换

总是忘&#xff0c;总是记混&#xff0c;气气气&#xff01; 基本类型 4整型、2浮点型、1布尔、1字符 关键字大小取值范围包装类型byte8-27~27-1Byteshort16-215~215-1Shortint32-231~231-1Integerlong64-263~263-1Longfloat323.4e-38~3.4e38Floatdouble641.7e-38~1.7e38Dou…

3.5 Spring MVC参数传递

Spring MVC的Controller接收请求参数的方式有多种&#xff0c;本节主要介绍Spring MVC下的HttpServletRequest、基本数据类型、Java Bean、数组、List、Map、JSON参数传递方式&#xff0c;同时解决POST请求中文乱码问题。 1. HttpServletRequest参数传递 Controller RequestM…

Easy Rules规则引擎(1-基础篇)

目录 一、序言二、Easy Rules介绍三、定义规则(Rules)1、规则介绍2、编程式规则定义3、声明式规则定义 四、定义事实(Facts)五、定义规则引擎(Rules Engine)1、规则引擎介绍2、InferenceRulesEngine规则引擎示例(1) 定义触发条件(2) 定义规则触发后的执行行为(3) 测试用例 一、…

【CSH 入门基础 5 -- csh 文件监控脚本实现】

文章目录 背景CSHLL 代码实现cshell 中 unset 的介绍bash 中监控文件的方法 背景 由于开发代码是在外网编译&#xff0c;而镜像的烧写是在内网中的EDA工具中进行的&#xff0c;所以就需要先将代码在外网编译好后&#xff0c;再通过FTP工具将镜像传输到内网中&#xff0c;然后在…

【手动配置ip地址后,电脑仍自动分配ip的问题】

现象 手动给电脑分配了一个ipv4地址&#xff0c;但是电脑会自动分配一个169开头的ipv4&#xff0c;导致虽然可以上网&#xff0c;但访问不了局域网内其他的设备&#xff08;我配置的另一个网关&#xff0c;所以可以上网&#xff09; 原因 ip地址冲突了&#xff0c;把电脑的i…

3.3 Postman基础

1. Postman概述 Postman是一个接口测试工具&#xff0c;Postman相当于一个客户端&#xff0c;可以模拟用户发起的各类HTTP请求&#xff0c;将请求数据发送至服务端&#xff0c;获取对应的响应结果。 Postman版本&#xff1a;Postman-win64-9.15.2-Setup.exe。 2. Postman的参…

uniapp 左右滑动切换页面并切换tab

实现效果如图 要实现底部内部的左右滑动切换带动上方tab栏的切换&#xff0c;并且下方内容要实现纵向滚动 &#xff0c;所以需要swiper&#xff0c;swiper-item,scroll-view组合使用 tab栏部分 <view class"tabs"><view class"tab_item" v-for&…

Matlab时频工具箱tftb下载及安装

Matlab 时频工具箱下载及安装 首先下载安装包安装包地址如下 链接: https://tftb.nongnu.org/ 点击下面的download 跳转到如下界面&#xff0c;选择下面的安装包下载 下载之后得到一个压缩包 然后找到Matlab的安装目录&#xff0c;右键桌面图标&#xff0c;打开文件所在位置…

39.输出二叉树的右视图

题目&#xff1a;请根据二叉树的前序遍历&#xff0c;中序遍历恢复二叉树&#xff0c;并打印出二叉树的右视图 思路&#xff1a;先根据前序遍历和中序遍历&#xff0c;得到二叉树。根据先序顺序得到根&#xff0c;再根据根得到其在中序遍历中的位置&#xff0c;然后得到左右子…

Spring中的Websocket身份验证和授权

目录 一、需要了解的事项二、依赖三、WebSocket 配置3.1 、简单的消息代理3.2 、Spring安全配置 一、需要了解的事项 http和WebSocket的安全链和安全配置是完全独立的。SpringAuthenticationProvider根本不参与 Websocket 身份验证。将要给出的示例中&#xff0c;身份验证不会…

网络编程小项目-tftp下载

tftp下载模型 TFTP通信过程总结 服务器在69号端口等待客户端的请求服务器若批准此请求&#xff0c;则使用 临时端口 与客户端进行通信。每个数据包的编号都有变化&#xff08;从1开始&#xff09;每个数据包都要得到ACK的确认&#xff0c;如果出现超时&#xff0c;则需要重新发…

SSL握手协议相关概念

下图为握手协议的流程图&#xff0c;具体的解释参考博客&#xff1a; 【下】安全HTTPS-全面详解对称加密&#xff0c;非对称加密&#xff0c;数字签名&#xff0c;数字证书和HTTPS_tenfyguo的博客-CSDN博客 下面梳理一下SSL协议中的一些细节。首先是相关名词&#xff1a;证书、…

Programming abstractions in C阅读笔记:p84-p87

《Programming Abstractions In C》学习第43天&#xff0c;p84-p87总结。 一、技术总结 1.record record也称为structure&#xff08;结构体&#xff09;&#xff0c;是一种数据结构。record里面的成员称为record的field。对于record&#xff0c;需要其基本用法&#xff1a;定义…

nodejs+vue+elementui健身俱乐部网站rix1z

为设计一个安全便捷&#xff0c;并且使用户更好获取本健身俱乐部管理信息&#xff0c;本文主要有安全、简洁为理念&#xff0c;实现用户快捷寻找健身课程、健身器材、会员卡信息、新闻公告等信息&#xff0c;从而解决健身俱乐部管理信息复杂难辨的问题。该系统以vue架构技术为基…