右键不能用-postscript
2023年4月3日发(作者:十六进制转十进制)
构建数据的归⼀化和标准化(某⾦融数据集)
导⼊各种包
importnumpyasnp
importpandasaspd
asplt
_selectionimporttrain_test_split
simportaccuracy_score,precision_score,recall_score,f1_score,roc_auc_score,roc_curve,auc
fromxgboostimportXGBClassifier
fromlightgbmimportLGBMClassifier
_modelimportLogisticRegression
fromsklearnimportsvm
portDecisionTreeClassifier
导⼊数据
data=_csv('./',index_col=0,encoding='gbk')
数据理解
#单独提取出y列标签,和其余的88列标记为x
y=data['status']
X=('status',axis=1)
#X值的⾏列数,以及y的分布类型
print(':',)
print('y的分布:',_counts())
:(4754,88)
y的分布:03561
11193
Name:status,dtype:int64
数据准备(添加数据标准化或归⼀化)
#⾸先剔除⼀些明显⽆⽤的特征,如id_name,custid,trade_no,bank_card_no
(['id_name','custid','trade_no','bank_card_no'],axis=1,inplace=True)
print()
#选取数值型特征
X_num=_dtypes('number').copy()
print(X_)
type(X_())
#使⽤均值填充缺失值
X_(X_(),inplace=True)
#观察数值型以外的变量
X_str=_dtypes(exclude='number').copy()
X_be()
#把reg_preference⽤虚拟变量代替,其它三个变量删除
X_str['reg_preference_for_trad']=X_str['reg_preference_for_trad'].fillna(X_str['reg_preference_for_trad'].mode()[0])
X_str_dummy=_dummies(X_str['reg_preference_for_trad'])
X_str_()
#合并数值型变量和名义型(字符型)变量
X_cl=([X_num,X_str_dummy],axis=1,sort=False)
#X_
X_()
"""
#数据标准化和归⼀化
fromsklearnimportpreprocessing
min_max_scale=Scaler()
min_max_data=min_max__transform(X_cl)
"""
fromsklearnimportpreprocessing
X_cl=(X_cl)
(4754,84)
(4754,80)
#以三七⽐例分割训练集和测试集
random_state=1118
X_train,X_test,y_train,y_test=train_test_split(X_cl,y,test_size=0.3,random_state=1118)
print(X_)
print(X_)
"""
#建⽴xgboost模型
xgboost_model=XGBClassifier()
xgboost_(X_train,y_train)
#⽤建⽴好的xgboost模型运⽤到训练集和测试集上,进⾏预测
y_train_pred=xgboost_t(X_train)
y_test_pred=xgboost_t(X_test)
#建⽴逻辑回归模型
lr=LogisticRegression(C=0.09,random_state=0,penalty='l1')
(X_train,y_train)
#⽤建⽴好的lr模型运⽤到训练集和测试集上,进⾏预测
y_train_pred=t(X_train)
y_test_pred=t(X_test)
"""
Lin_SVC=(probability=True)
Lin_(X_train,y_train)
y_train_pred=Lin_t(X_train)
y_test_pred=Lin_t(X_test)
(3327,85)
(1427,85)
模型评估
print('训练集:{:.4f}'.format(roc_auc_score(y_train,y_train_pred)))
print('测试集:{:.4f}'.format(roc_auc_score(y_test,y_test_pred)))
训练集:1.0000
测试集:0.5000
总结:数据的归⼀化对模型效果是有影响的,其中lr有提升,xgboost反⽽下降了⼀点(可能是树模型⾃⾝对归⼀化不敏感),svm在没有
归⼀化时AUC始终为0.5,归⼀化后效果变好。
问题:尝试lr模型惩罚函数⽤默认值l2,在不做数据归⼀化时,效果很差,训练集和测试集auc都=0.5,不知道为什么。改成l1是否做归⼀
化,影响就不⼤了。
更多推荐
vcfencoding
发布评论