【阿里天池云-龙珠计划】薄书的机器学习笔记——快来一起挖掘幸福感!Task04

【给各位看官请安】

大家一起来集齐七龙珠召唤神龙吧!!!

学习地址:AI训练营机器学习-阿里云天池

推荐一下我由此上车的公众号:AI蜗牛车,时空序列相关文章挺多的。

Task01:基于逻辑回归模型的多分类场景预测实战

Task02:朴素贝叶斯(Naive Bayes)

Task03:K近邻(k-nearest neighbors)初探


【现在开始笔记】

比赛链接

幸福感是一个古老而深刻的话题,是人类世代追求的方向。与幸福感相关的因素成千上万、因人而异,大如国计民生,小如路边烤红薯,都会对幸福感产生影响。这些错综复杂的因素中,我们能找到其中的共性,一窥幸福感的要义吗?

1.赛事简介

天池新人实战赛是针对数据新人开设的实战练习专场,以经典赛题作为学习场景,提供详尽入门教程,手把手教你学习数据挖掘。天池希望新人赛能成为高校备受热捧的数据实战课程,帮助更多学生掌握数据技能。

新人实战前,免费AI课程走一波

2.赛制说明

本场比赛长期开放,报名和参赛无时间限制。

参赛报名

  1. 要求以个人形式参与比赛,并确保报名信息准确有效;
  2. 报名方式:用淘宝或阿里云账号登入天池官网,完成个人信息注册,即可报名参赛;
  3. 参赛指南
  4. 历届比赛沉淀

参赛规则

  1. 报名成功后,选手下载数据,在本地调试算法,提交结果;
  2. 提交后将进行实时评测;每天排行榜更新时间为12:0020:00,按照评测指标得分从低到高排序;排行榜将选择历史最优成绩进行展示。

参赛对象

大赛面向全社会开放,参赛对象不限,要求以个人形式参赛。

3.一个demo

3.1导入数据

import pandas as pd
import numpy as np
from sklearn.metrics import mean_squared_error
import lightgbm as lgb
import xgboost as xgb
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import OneHotEncoder
from sklearn.model_selection import KFold, RepeatedKFold
from scipy import sparse
#显示所有列
pd.set_option('display.max_columns', None)
#显示所有行
pd.set_option('display.max_rows', None)
from datetime import datetime

#导入数据
train_abbr=pd.read_csv("download/happiness_train_abbr.csv",encoding='ISO-8859-1')
train=pd.read_csv("download/happiness_train_complete.csv",encoding='ISO-8859-1')
test_abbr=pd.read_csv("download/happiness_test_abbr.csv",encoding='ISO-8859-1')
test=pd.read_csv("download/happiness_test_complete.csv",encoding='ISO-8859-1')
test_sub=pd.read_csv("download/happiness_submit.csv",encoding='ISO-8859-1')

#观察数据大小
print(train_abbr.shape)
print(train.shape)
print(test_abbr.shape)
print(test.shape)
(8000, 42)
(8000, 140)
(2968, 41)
(2968, 139)
test_sub.shape
(2968, 2)

3.2数据处理

#简单查看数据
train.head()
#查看数据是否缺失
train.info(verbose=True,null_counts=True)
#查看label分布
y_train_=train["happiness"]
y_train_.value_counts()
 4    4818
 5    1410
 3    1159
 2     497
 1     104
-8      12
Name: happiness, dtype: int64
#将-8换成3  把无法回答的归为3
y_train_=y_train_.map(lambda x:3 if x==-8 else x)
#让label从0开始
y_train_=y_train_.map(lambda x:x-1)
#train和test连在一起
data = pd.concat([train,test],axis=0,ignore_index=True)
#全部数据大小
data.shape
#处理时间特征  把问卷的时间 转换为数字特征
data['survey_time'] = pd.to_datetime(data['survey_time'],format='%Y-%m-%d %H:%M:%S')
data["weekday"]=data["survey_time"].dt.weekday
data["year"]=data["survey_time"].dt.year
data["quarter"]=data["survey_time"].dt.quarter
data["hour"]=data["survey_time"].dt.hour
data["month"]=data["survey_time"].dt.month
#把一天的时间分段
def hour_cut(x):
    if 0<=x<6:
        return 0
    elif  6<=x<8:
        return 1
    elif  8<=x<12:
        return 2
    elif  12<=x<14:
        return 3
    elif  14<=x<18:
        return 4
    elif  18<=x<21:
        return 5
    elif  21<=x<24:
        return 6
data["hour_cut"]=data["hour"].map(hour_cut)
#做问卷时候的年龄
data["survey_age"]=data["year"]-data["birth"]

#让label从0开始
data["happiness"]=data["happiness"].map(lambda x:x-1)

#去掉三个缺失值很多的
data=data.drop(["edu_other"], axis=1)
data=data.drop(["happiness"], axis=1)
data=data.drop(["survey_time"], axis=1)

#是否入党
data["join_party"]=data["join_party"].map(lambda x:0 if pd.isnull(x)  else 1)
#出生的年代  转化为数字特征
def birth_split(x):
    if 1920<=x<=1930:
        return 0
    elif  1930<x<=1940:
        return 1
    elif  1940<x<=1950:
        return 2
    elif  1950<x<=1960:
        return 3
    elif  1960<x<=1970:
        return 4
    elif  1970<x<=1980:
        return 5
    elif  1980<x<=1990:
        return 6
    elif  1990<x<=2000:
        return 7
    
data["birth_s"]=data["birth"].map(birth_split)
#填充数据
data["edu_status"]=data["edu_status"].fillna(5)
data["edu_yr"]=data["edu_yr"].fillna(-2)
data["property_other"]=data["property_other"].map(lambda x:0 if pd.isnull(x)  else 1)
data["hukou_loc"]=data["hukou_loc"].fillna(1)
data["social_neighbor"]=data["social_neighbor"].fillna(8)
data["social_friend"]=data["social_friend"].fillna(8)
data["work_status"]=data["work_status"].fillna(0)
data["work_yr"]=data["work_yr"].fillna(0)
data["work_type"]=data["work_type"].fillna(0)
data["work_manage"]=data["work_manage"].fillna(0)
data["family_income"]=data["family_income"].fillna(-2)
data["invest_other"]=data["invest_other"].map(lambda x:0 if pd.isnull(x)  else 1)
#填充数据
data["minor_child"]=data["minor_child"].fillna(0)
data["marital_1st"]=data["marital_1st"].fillna(0)
data["s_birth"]=data["s_birth"].fillna(0)
data["marital_now"]=data["marital_now"].fillna(0)
data["s_edu"]=data["s_edu"].fillna(0)
data["s_political"]=data["s_political"].fillna(0)
data["s_hukou"]=data["s_hukou"].fillna(0)
data["s_income"]=data["s_income"].fillna(0)
data["s_work_exper"]=data["s_work_exper"].fillna(0)
data["s_work_status"]=data["s_work_status"].fillna(0)
data["s_work_type"]=data["s_work_type"].fillna(0)

fillna()函数详解

 data=data.drop(["id"], axis=1)  # 删除ID列  

Python进行数据处理之Pandas的drop函数

3.3设立训练集和测试集

X_train_ = data[:train.shape[0]]
X_test_  = data[train.shape[0]:]

target_column = 'happiness'
feature_columns=list(X_test_.columns) 
print(feature_columns)
X_train = np.array(X_train_)
y_train = np.array(y_train_)
X_test  = np.array(X_test_)

print(X_train.shape)
print(y_train.shape)
print(X_test.shape)
(8000, 144)
(8000,)
(2968, 144)

未完

原文地址:https://www.cnblogs.com/aimoboshu/p/14264311.html