zoukankan      html  css  js  c++  java
  • 【阿里天池云-龙珠计划】薄书的机器学习笔记——快来一起挖掘幸福感!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)
    

    未完

  • 相关阅读:
    基于接口的动态代理和基于子类的动态代理
    JDBC连接数据库
    关于使用Binlog和canal来对MySQL的数据写入进行监控
    使用VMware12在CentOS7上部署docker实例
    VMWare12pro安装Centos 6.9教程
    读《Java并发编程的艺术》学习笔记(十)
    读《Java并发编程的艺术》学习笔记(九)
    读《Java并发编程的艺术》学习笔记(八)
    读《Java并发编程的艺术》学习笔记(七)
    读《Java并发编程的艺术》学习笔记(六)
  • 原文地址:https://www.cnblogs.com/aimoboshu/p/14264311.html
Copyright © 2011-2022 走看看