1、创建空列表
#创建一个长度为3000,初始值都为0的列表:
PD_pre=[0 for x in range(0,3000)]
cols=list()
for i,(name,m) in enumerate(model_list.items()):
cols.append(name)
P.columns=cols
2、数据框添加两列、并加变量名
#方法1:
validationset['PD_pre']=PD_pre
validationset['PD_prediction']=PD_prediction
#方法2
#第一步定义字典
c={"PD_pre" : PD_pre,
"PD_prediction" : PD_prediction}
#第二步字典转数据框
c=pd.DataFrame(c)
#第三步两数据框合并(横向/增加列)
d=pd.concat([validationset,c])#不对 .concat默认axis=0(纵向/行增加)
f = pd.concat( [validationset, c], axis=1 )#对√
f.head()
3、数据框挑选列
y_test=validation[['PD']]#还是数据框类型
4、创建空数据框
# 创建一个空的 DataFrame
df_empty = pd.DataFrame(columns=['A', 'B', 'C', 'D'])
或者
P=np.zeros((y_test.shape[0],len(model_list)))
P=pd.DataFrame(P)
P.columns=cols
#并用【.iloc[:,i]】填充
model_list={'dt' : dt,
'svm' : svc,
'knn' : knn,
'naive bayes' : nb,
'mlp-nn' : nn,
'random forest' : rf,
'gbm' : gb,
'logistic' : lr,
'xgboost' : xgb}
for i,(name,m) in enumerate(model_list.items()):
m.fit(X_train,y_train)
P.iloc[:,i]=m.predict_proba(X_test)[:,1]
5、数据框拼接(.concat函数,默认纵向拼接)
df_empty = pd.DataFrame(columns=['PD', 'EAD.', 'LGD', 'EL.', 'age', 'gender', 'marriage', 'officeDomain',
'officeScale', 'officeType', 'salary', 'workYears', 'graduation',
'hasHouse', 'houseLoan', 'hasCar', 'carLoan', 'credit', 'work',
'incomeDuty', 'identification', 'borrowType', 'amount', 'interest',
'months', 'jobType', 'dti'])
for a in range(1,6):
#导入每一折的训练集、验证集
trainset=pd.read_csv("E:/anaconda3/DATA/trainset%d.csv" %a)
df_empty=pd.concat([df_empty,trainset])
6、数据框选变量用. 或[’ '] 或.loc 可以进行计算
valid_predefault['EL_prediction']=valid_predefault.PD_prediction*valid_predefault.EAD_prediction*valid_predefault.LGD_prediction
或valid_predefault['EL_prediction']=valid_predefault['PD_prediction']*valid_predefault['EAD_prediction']*valid_predefault['LGD_prediction']
#提取某一列成列表能运算
#方法1
y_pred=PD_valid_result.loc[:,'PD_prediction']
#方法2
y_pred=PD_valid_result['PD_prediction']
#方法3
y_pred=PD_valid_result.PD_prediction
7、数据框条件赋值
# 使用apply函数, 如果city字段包含'ing'关键词,则'判断'这一列赋值为1,否则为0
frame['panduan'] = frame.city.apply(lambda x: 1 if 'ing' in x else 0)
或
#函数方式
def fun(x):
if x >= 30:
return 1
else:
return 0
values= feature['values'].apply(lambda x: fun(x))
#若需要将改动赋值给原始的feature的列中的话,可以进行一次赋值
feature['values']=values
#或者直接一次修改后赋值。
feature['values']= feature['values'].apply(lambda x: fun(x))
8、写函数、传参
#PD_valid_result为数据框
def get_TP(a, b):
if a == 0 and b == 0:PD_valid_result
return 1
else:
return 0
TP = PD_valid_result.apply(lambda x: get_TP(x.PD, x.PD_prediction), axis = 1)
TP = len(TP[TP==1])
print(TP)
def get_prediction(x):
if x > T:
return 1
else:
return 0
c['PD_prediction']=c['PD_pre'].apply(lambda x: get_prediction(x))
9、关于F1值
要计算每个类别下的precision和recall,从而计算每个类别下的f1-score;
再求均值
如果是二分类问题则选择参数‘binary’;如果考虑类别的不平衡性,需要计算类别的加权平均,则使用‘weighted’;如果不考虑类别的不平衡性,计算宏平均,则使用‘macro’
print(f1_score(y_true, y_pred, average='macro'))
print(f1_score(y_true, y_pred, average='weighted'))
10.print函数
print('文字 : %.4f' %值)
#如:
print('f1_score: %.4f' % f1_score)