第一次尝试(使用xgboost回归)
这里难度不是很大,可以参考XGBRegressor使用。我这里将预测的数据保存到文件中,方便之后的操作,不用每次操作都训练一次。
import pandas as pd
from xgboost import XGBClassifier#做分类问题
from xgboost import XGBRegressor#做回归问题
df = pd.read_csv("/Users/apple/PycharmProjects/K-means/Datawhale/Result3.csv")
Y = df['isDefault']#标签
df.drop(['isDefault'],axis=1,inplace=True)#删除isDefault列
X= df#属性
seed = 7
test_size = 0.33
X_train=X
Y_train=Y
df2=pd.read_csv("/Users/apple/PycharmProjects/K-means/Datawhale/TESTResult3.csv")
X_predict=df2#预测数据(处理过只剩属性)
df3=pd.read_csv("/Users/apple/PycharmProjects/K-means/Datawhale/TESTResult2.csv")
id_number=df3['id']#获得预测数据的ID号,由于预测数据已经被处理,因此记录下可预测数据的ID号,为之后将剩下的ID号赋予平均值
xgb = XGBRegressor(n_estimators=500, learning_rate=0.05, min_child_weight=5, max_depth=4)
xgb.fit(X_train,Y_train)
y_predict=xgb.predict(X_predict)
afterpredcit=pd.DataFrame({
'id': id_number,
'isDefault': y_predict
})
print(y_predict)
afterpredcit.to_csv('./PredictResult.csv',index=False)#保存时去索引 否则会多加第一列
df=pd.read_csv("/Users/apple/PycharmProjects/K-means/Datawhale/PredictResult.csv")
id_number=round(df['isDefault'],1)#将预测结果变换为规定形式:一位小数
j=len(id_number)
#################处理数据中可能含有的负数和-0.O
for i in range(j):
if id_number[i]<=0:
id_number[i]=0
df['isDefault']=id_number
#################获得预测数据的均值
mean_number=id_number.mean()
mean_number=round(mean_number,1)
print(mean_number)
#i=800000
i=800000#
while i <1000000:
j=i-800000
print(i)
#################将之前步骤中直接删除缺省项的值变为预测平均值
if df['id'][j]!=i:
df2 = df.loc[j:]
df3=pd.DataFrame({
'id' : i,
'isDefault' : mean_number
},pd.Index(range(1)))
df=(df.loc[:j-1]).append(df3, ignore_index=True).append(df2, ignore_index=True)
i=i+1
df.to_csv('./PredictResult2.csv',index=False)#保存时去索引 否则会多加第一列
第一次提交的时候简单的将缺省值赋值了0,之后想了下有点蠢将预测值赋值平均值,提升效果还是很明显的。