数据来源:第二届全国大学生大数据挑战赛
数据样例:
数据描述:2017大数据挑战赛
数据处理:
0.包含必要库:
import numpy as np
import pandas as pd
from sklearn.utils import shuffle
from xgboost import XGBClassifier
from imblearn.over_sampling import SMOTE
from sklearn.grid_search import GridSearchCV
DATA_DIR='D:/csdn/dsjtzs_txfz_training.txt'
1.读取数据:
def get_data(data_dir):
with open(data_dir) as f:
lines=[x.strip('\n') for x in f.readlines()]
return lines
2.切分数据:
def cut_data(data,save_label=None):
"""
save_label:保存路径
"""
Id=[]
postion=[]
label=[]
for line in data:
Id.append(line[0])
postion.append(line[1:-1].strip())
label.append(line[-1])
if save_label!=None:
np.save(save_label,np.array(label))
return Id,postion,label
3.按坐标分开:
def cast(data):
"""
返回一个字典
"""
X_pos=[]
Y_pos=[]
T_pos=[]
X_end=[]
Y_end=[]
for i in list(data):
i=i.replace(';',',').split(',')
X_pos.append(i[:-2:3])
Y_pos.append(i[1:-2:3])
T_pos.append(i[2:-2:3])
X_end.append(i[-2])
Y_end.append(i[-1])
return dict(X_pos=X_pos,Y_pos=Y_pos,T_pos=T_pos,X_end=X_end,Y_end=Y_end)
4.找呀找呀找特征
def find_features(data,key,save_dir=None):
"""
data:dict(X_pos=X_pos,Y_pos=Y_pos,T_pos=T_pos,X_end=X_end,Y_end=Y_end)
key:data中的键
抽取样例特征
"""
d=data[key]
f1=[]
f2=[]
f3=[]
"""
...
可扩展特征
"""
for i in d:
i=pd.Series(i).astype(float)
f1.append(i.var())
f2.append(i.std())
f3.append(i.diff())
features=np.array([f1,f2,f3]).T
if save_dir!=None:
np.save(save_dir,features)
return features
5.连接特征:
def concatenate_fea(feature_tuple,save_dir=None):
"""
连接特征
"""
features=np.concatenate(feature_tuple,axis=1)
if save_dir!=None:
np.save(save_dir,features)
return features
6.填nan,打乱:
def fill_shuff(data,label):
data=np.nan_to_num(data)
data,label=shuffle(data,label)
return data,label
7.正负样本平衡:
def improve_data(data,label):
sm=SMOTE(random_state=0)
data,label=sm.fit_sample(data,label)
return data,label
8.网格化调参:
def grid_train(data,label,params,estimator=XGBClassifier()):
gs=GridSearchCV(estimator,params,cv=5,iid=False,n_jobs=5,scoring='roc_auc')
gs.fit(data,label)
print(gs.best_params_,gs.best_score_)
代码暂时就撸到这里了,特征的话一两百个我会写出来?不存在的
后面还有模型融合等方法(我的理解其实和神经网络差不多,都是提取出高阶特征),下回再说!!
(扶我起来,我还能再撸100行!)