机器学习笔记1

一. 任务一:跑通Baseline

使用平台环境,直接在平台fork,提交即可,第一次跑评分为0.62673。

二. 阅读赛题信息,理解赛题思路

2.1 赛事任务

基于提供的样本构建模型,预测用户的新增情况。赛事链接:2023 iFLYTEK A.I.开发者大赛-讯飞开放平台 (xfyun.cn)

2.2 数据说明

赛题数据由约62万条训练集、20万条测试集数据组成,共包含13个字段。其中uuid为样本唯一标识,eid为访问行为ID,udmap为行为属性,其中的key1到key9表示不同的行为属性,如项目名、项目id等相关字段,common_ts为应用访问记录发生时间(毫秒时间戳),其余字段x1至x8为用户相关的属性,为匿名处理字段。target字段为预测目标,即是否为新增用户。

2.3 分数评估

竞赛的评价标准采用f1_score,分数越高,效果越好

2.4塞题思路

人工提取特征并构建恰当的模型。(这个应该是重点吧,虽然本小白还不太懂)

三. 基础baseline代码分析

In [ ]

//导入Pandas库、NumPy库
​import pandas as pd 
import numpy as np

//用Pandas库载入训练数据、测试数据
train_data = pd.read_csv('用户新增预测挑战赛公开数据/train.csv')
test_data = pd.read_csv('用户新增预测挑战赛公开数据/test.csv')

//使用 pd.to_datetime函数 将train_data、test_dataz中的common_ts列数据从
arg数据(单位ms)转化为datetime数据。
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')

相关学习资料:

Pandas 教程 | 菜鸟教程 (runoob.com)

NumPy 教程 | 菜鸟教程 (runoob.com)

In [ ]

//读取数据可发现udmap中存在字典形式和unknown字符。
//字典形式以key-value键值对的方式存储。而udmap列数据值实际是以字符的形式存储,需要先用eval函数将udmap中数据解析为字典。
//对udmap列进行One-Hot编码

def udmap_onethot(d):  //定义函数udmap_onethot,定义参数d(表示数据集中每一个数据)
    v = np.zeros(9)    //创建一个长度为9的数组v
    if d == 'unknown': 
        return v       //如果udmap的数据为unknown,返回全零数组v,数据无效
    
    d = eval(d)        //用eval函数将udmap的数据解析为字典
    for i in range(1, 10): 
        if 'key' + str(i) in d: 
            v[i-1] = d['key' + str(i)] 
                      //遍历key1-key9,如果当前key在字典中,将字典中的值存储在对应的索引位置上
       
    return v


//把 udmap_onehot函数 apply到 train_data 中 udmap 列每一数据得到多个数组
//使用np.vstack函数 按垂直方向(行顺序)堆叠所得数组构成一个新的数组
//使用pd.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)))

//Pandas DataFrame.columns属性返回给定的Dataframe的列标签。这里是把列标签改为key1—key9

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)]

相关学习资料:

机器学习:数据预处理之独热编码(One-Hot)详解_ZhaoYingChao88的博客-CSDN博客

Numpy 中 np.vstack() 和 np.hstack() 简单解析_南淮北安的博客-CSDN博客

pd.DataFrame()函数_流年里不舍的执着的博客-CSDN博客

In [ ]

//使用 pd.concat函数 合并原数据与处理得到的特征数据,参数axis=1代表拼接方式为左右拼接。
train_data = pd.concat([train_data, train_udmap_df], axis=1)
test_data = pd.concat([test_data, test_udmap_df], axis=1)

In [ ]

//通过value_counts() 返回每个 eid 出现的频次计数
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())


//使用 groupby() 将eid列作为分类依据,然后计算每个eid分组的target均值(mean),将该新列命名为‘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())

相关学习资料:

pandas数据处理之groupby的常用用法_train.groupby_mocas_wang的博客-CSDN博客

pandas计数函数 :value_counts( )和counts( )的使用 - 知乎 (zhihu.com)

In [ ]

//使用比较运算符将每个样本的 'udmap' 列与字符串 'unknown' 进行比较,返回一个
//布尔值(包含True、False)的 Series ,使用 astype(int) 将布尔值转换为整数(0 或 1),
//以便进行后续的数值计算和分析,将该新列命名为‘udmap_isunknown’:

train_data['udmap_isunknown'] = (train_data['udmap'] == 'unknown').astype(int)
test_data['udmap_isunknown'] = (test_data['udmap'] == 'unknown').astype(int)

In[ ]

//从common_ts列中提取小时信息,并创建一个新的特征列common_ts_hour
train_data['common_ts_hour'] = train_data['common_ts'].dt.hour
test_data['common_ts_hour'] = test_data['common_ts'].dt.hour

In[ ]

//引入lightgbm、sklearn.linear_model和sklearn.tree库

import lightgbm as lgb
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier

//训练模型

clf = DecisionTreeClassifier()
clf.fit(
    train_data.drop(['udmap', 'common_ts', 'uuid', 'target'], axis=1),
    train_data['target']
)
// 使用模型 clf 对测试数据集进行预测,并将预测结果存储在target列中

【Python机器学习】——决策树DecisionTreeClassifier详解_小猪课堂的博客-CSDN博客

决策树在sklearn中的实现 - banshaohuan - 博客园 (cnblogs.com)

In[ ]

//预测结果保存数据
pd.DataFrame({
    'uuid': test_data['uuid'],
    'target': clf.predict(test_data.drop(['udmap', 'common_ts', 'uuid'], axis=1))
}).to_csv('submit.csv', index=None)

下载结果提交,得到第一次分数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值