【给各位看官请安】
大家一起来集齐七龙珠召唤神龙吧!!!
学习地址:AI训练营机器学习-阿里云天池
推荐一下我由此上车的公众号:AI蜗牛车,时空序列相关文章挺多的。
Task01:基于逻辑回归模型的多分类场景预测实战
Task02:朴素贝叶斯(Naive Bayes)
Task03:K近邻(k-nearest neighbors)初探
【现在开始笔记】
幸福感是一个古老而深刻的话题,是人类世代追求的方向。与幸福感相关的因素成千上万、因人而异,大如国计民生,小如路边烤红薯,都会对幸福感产生影响。这些错综复杂的因素中,我们能找到其中的共性,一窥幸福感的要义吗?
1.赛事简介
天池新人实战赛是针对数据新人开设的实战练习专场,以经典赛题作为学习场景,提供详尽入门教程,手把手教你学习数据挖掘。天池希望新人赛能成为高校备受热捧的数据实战课程,帮助更多学生掌握数据技能。
2.赛制说明
本场比赛长期开放,报名和参赛无时间限制。
参赛报名
参赛规则
- 报名成功后,选手下载数据,在本地调试算法,提交结果;
- 提交后将进行实时评测;每天排行榜更新时间为12:00和20: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)
data=data.drop(["id"], axis=1) # 删除ID列
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)
未完