右键不能用-postscript

vcfencoding
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