我有训练和测试数据集。我想对我的测试数据集进行预测并将其保存为CSV文件。问题是,
我无法保存测试数据集的结果。每次我保存的都是训练数据集的结果。
如果你能告诉我我遗漏了什么,那就太好了。
这是我的代码。
import pandas as pd
import numpy as np
from sklearn.ensemble import RandomForestClassifier
import random
from sklearn.metrics import roc_curve
from sklearn.preprocessing import LabelEncoder
from sklearn import metrics
Train = pd.read_csv('Dataset/train.csv', delimiter=';')
Test = pd.read_csv('Dataset/train.csv', delimiter=';')
Train['Type'] = 'Train' # 为训练和测试数据集创建一个标志
Test['Type'] = 'Test'
FullData = pd.concat([Train, Test], axis=0) # 合并训练和测试数据集
ID_Col = ['USER_ID'] # ID变量
Target_Col = ["ACTIVITY_DEC_16"]
Cat_Cols = ['ACT_DATE', 'STATUS', 'TP_CURRENT', 'TP_CHANGES_NUM', 'START_PACK', 'OFFER_GROUP', 'BIRTHDAY', 'GENDER', 'MLLS_STATE', 'PORTED_IN', 'PORTED_OUT', 'OBLIG_NUM', 'OBLIG_ON_START', 'ASSET_TYPE_LAST', 'DEVICE_TYPE_BUS', 'USAGE_AREA', 'REFILL_OCT_16', 'REFILL_NOV_16', 'OUTGOING_OCT_16', 'OUTGOING_NOV_16', 'GPRS_OCT_16', 'GPRS_NOV_16', 'REVENUE_OCT_16', 'REVENUE_NOV_16'] # 分类变量
Num_Cols = list(set(list(FullData.columns)) - set(Cat_Cols) - set(ID_Col) - set(Target_Col)) # 数值变量
Other_Col = ['Type'] # 测试和训练数据集标识符
Num_Cat_Cols = Num_Cols + Cat_Cols # 合并数值和分类变量
# 为每个有缺失值的变量创建一个新的变量,变量名为VariableName_NA,
# 并用1标记缺失值,用0标记其他值
for var in Num_Cat_Cols:
if FullData[var].isnull().any() == True:
FullData[var + '_NA'] = FullData[var].isnull() * 1
# 用均值填补数值变量的缺失值
FullData[Num_Cols] = FullData[Num_Cols].fillna(FullData[Num_Cols].mean(), inplace=True)
FullData[Cat_Cols] = FullData[Cat_Cols].fillna(value=-9999)
# 为分类变量创建标签编码器,并将数据集拆分为训练和测试集。进一步将训练数据集拆分为训练和验证集
for var in Cat_Cols:
number = LabelEncoder()
FullData[var] = number.fit_transform(FullData[var].astype('str'))
# 目标变量也是分类变量,所以转换它
FullData["ACTIVITY_DEC_16"] = number.fit_transform((FullData["ACTIVITY_DEC_16"].astype('str')))
Train = FullData[FullData['Type'] == 'Train']
Test = FullData[FullData['Type'] == 'Test']
Train['is_train'] = np.random.uniform(0, 1, len(Train)) <= 0.75
Train, Validate = Train[Train['is_train'] == True], Train[Train['is_train'] == False]
Features = list(set(list(FullData.columns)) - set(ID_Col) - set(Target_Col) - set(Other_Col))
X_Train = Train[list(Features)]
Y_Train = Train["ACTIVITY_DEC_16"].values
X_Validate = Validate[list(Features)].values
Y_Validate = Validate["ACTIVITY_DEC_16"].values
X_Test = Test[list(Features)].values
random.seed(100)
rf = RandomForestClassifier(n_estimators=1000)
rf.fit(X_Train, Y_Train)
Status = rf.predict_proba(X_Validate)
fpr, tpr, _ = roc_curve(Y_Validate, Status[:, 1])
roc_auc = metrics.auc(fpr, tpr)
Final_Status = rf.predict_proba(X_Test)
print(Final_Status)
Test['ACTIVITY_DEC_16_PROB'] = Final_Status[:, 1]
Test.to_csv('/Users/isozyesil/PycharmProjects/TaskNo2/Dataset/Output.csv', columns=['USER_ID', 'ACTIVITY_DEC_16_PROB'])
回答:
再次访问训练数据而不是测试数据。
Train = pd.read_csv('Dataset/train.csv', delimiter=';')
Test = pd.read_csv('Dataset/test.csv', delimiter=';')