2023AI夏令营(三)-机器学习第一次呆笔记-用户新增预测挑战赛baseline

声明:本学习笔记大概率存在诸多问题,建议另去知识分享blog查看相关内容。by小信

一、关于平台文件

.ipynb文件是使用交互式笔记本Jupyter Notebook,有文字和代码。

在jupyter下的File—>Download as —>python(.py)可以将.ipynb转化为.py文件。

注意:pycharm也可以直接打开.ipynb格式的文件查看(不能运行)。Jupyter也可以打开.py格式的文件查看(不能运行)。

————————————————

版权声明:本文为CSDN博主「小小小花儿」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:.py文件和.ipynb文件_小小小花儿的博客-CSDN博客

二、库

注:Anaconda 里面已经集成了你想要的各种机器学习库,比如:numpyscipy,pandas等,

而且学习机器学习用jupyter notebook挺方便的。

————————————————

版权声明:本文为CSDN博主「人大神成长记2」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/weixin_43330388/article/details/88043375

1.Pandas是第三方库,需要安装;同时会安装numpy库。

2.选取的决策树模型(from sklearn.tree import DecisionTreeClassifier)需要sklearn模块,一般似乎都在虚拟环境下pip安装。。那我就放弃本地了。老老实实用BML CodeLab在线平台(不知道.py文件怎么运行,所以最终选择notebook文件写代码并运行)了。

三、比赛

(1)评判标准

1.混淆矩阵2x2,TP,FP,FN,TN

2.查准率precision=TP/(TP+FP)

查全率recall=TP/(TP+FN)

3.f1=2/(1/precision+1/recall)=2TP/(2TP+FP+FN)。f1 正相关评价 判断的效果。

(2)机器学习一般流程

1.数据探索是人工借助工具挖掘数据之间的关系,是最具活力、最有深远意义的步骤。

2.数据清洗是剔除离群的疑似错误的数据,避免对模型造成损害。

(3)赛题数据

1.共包含13个字段。其中uuid为样本唯一标识(1);eid为访问行为ID,udmap为行为属性key1到key9(2);common_ts为应用访问记录发生时间(毫秒时间戳)(1); x1至x8为用户相关的属性(8);target字段为预测目标(1)

2.据观察公开数据表,eid存在重复,udmap存在unknown且key不齐。

四、Python

(1)import

1.(导入包名)import os

2.from math import pow

3.from math import *

4.(导入并赋名)import math as m

5.(导入并赋名)from math import pi as p

(2)类debug

1.data.info()         每列类型,以及查空值

2.data.head()       显示前几行,参数类型int,可空默认int

3.data.tail()          显示后几行

4.data.colums      显示所有列名,无参数

(3)读取数据

1.pandas库的read_文件格式(“文件路径”) 函数。返回对应文件形式的数据类型,比如表格。

2.使用 pd.to_datetime() 函数将时间戳列转换为 datetime 类型。参数为数据,“unit=”是输入数据的时间单位。

【如下图的common_ts】

注: 需要注意时间戳的长度, 如果是13位则unit 为 毫秒, 如果是10位则为 秒, 这是转时间戳时容易踩的坑

此后,用dt.hour 属性从 datetime 列中提取小时信息等。

 3.数据集中, udmap实际是以字符的形式存储, 所以处理时需要先用eval 函数将'udmap' 解析为字典。

(4)数据处理

1.定义函数 udmap_onethot,用于将 'udmap' 列进行 One-Hot 编码(依据可见赛题数据)

def udmap_onethot(d):
    v = np.zeros(9)  # 创建一个长度为 9 的零数组
    if d == 'unknown':  # 如果 'udmap' 的值是 'unknown'
        return v  # 返回零数组
    d = eval(d)  # 将 'udmap' 的值解析为一个字典
    for i in range(1, 10):  # 遍历 'key1' 到 'key9', 注意, 这里不包括10本身
        if 'key' + str(i) in d:  # 如果当前键存在于字典中
            v[i-1] = d['key' + str(i)]  # 将字典中的值存储在对应的索引位置上
            
    return v  # 返回 One-Hot 编码后的数组

注:字典按键key迭代。

2.pandas库的apply()函数

dataframe.apply(函数名)

②dataframe['列名'].apply(函数名) or data.loc[:,'列名'].apply(函数名)

Pandas读取某列、某行数据——loc、iloc用法总结_pandas iloc_子木同学的博客-CSDN博客

3.np.vstack() 用于将结果堆叠成一个数组。数组维度+1。

4.DataFrame的创建和使用(下方链接含baseline中常见的 加 列 操作

Python Pandas中dataframe常用操作(创建、读取写入、切片等)_Parzival_的博客-CSDN博客

5.pd.concat([dataframe1,dataframe2],axis=1)拼接矩阵

axis:合并时参考的轴,axis=0为基于行合并,往下拼;axis=1为列合并,往右拼;默认为0。

6.备用fillna

Python中缺失值的填充fillna()函数_刘经纬老师的博客-CSDN博客

(5)特征工程

1.列与值直接比较逐行比较逐行返回结果成列

eg.每个样本的 'udmap' 列与字符串 'unknown' 进行比较,返回一个布尔值的 Series(可用于加列)

注:().astype(int) 将布尔值转换为整数(0 或 1)

2.map() 方法将 根据样本获取的值 映射对应样本(如图三)

如图一,.value_counts()(频次特征)的结果是不重复的。如图二,map是根据寻找原值来映射。

 

 3.train_data.groupby('eid')['target'].mean()

按eid分组,求target平均值;因为target是01分布,所以十分直观。

(6)决策树模型(待补充)

1.train_data.drop(['udmap', 'common_ts', 'uuid', 'target'], axis=1)

从训练数据集中移除列 'udmap', 'common_ts', 'uuid', 'target'

2.使用 fit 方法训练模型

clf.fit(
    train_data.drop(['udmap', 'common_ts', 'uuid', 'target'], axis=1),  # 特征数据:移除指定的列作为特征
    train_data['target']  # 目标数据:将 'target' 列作为模型的目标进行训练
)

(7)结果保存

result_df = pd.DataFrame({
    'uuid': test_data['uuid'],  
    'target': clf.predict(test_data.drop(['udmap', 'common_ts', 'uuid'], axis=1)) #clf为决策树
})


result_df.to_csv('submit.csv', index=None)

五、回答问题

1.如果将submit.csv提交到讯飞比赛页面,会有多少的分数?

答:0.6~0.7

2.代码中如何对udmp进行了人工的onehot?

答:多维向量法,按位置记录对应数据,用0记空。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值