2017-05-14 106 views
0

我试图建立一个电动汽车充电事件数据的分类模型。我想预测充电站是否可以在特定的时间点使用。我有下面的代码工作:sklearn随机森林准确性分数相同的训练和测试数据

from sklearn.ensemble import RandomForestClassifier 
import pandas as pd 

raw_data = pd.read_csv('C:/temp/sample_dataset.csv') 
raw_test = pd.read_csv('C:/temp/sample_dataset_test.csv') 
print ('raw data shape: ', raw_test.shape) 

#choose which columns to dummify 
X_vars = ['station_id', 'day_of_week', 'epoch', 'station_city', 
'station_county', 'station_zip', 'port_level', 'perc_local_occupancy', 
'ports_at_station', 'avg_charge_duration'] 
y_var = ['target_variable'] 
categorical_vars = ['station_id','station_city','station_county'] 

#split X and y in training and test 
X_train = raw_data.loc[:,X_vars] 
y_train = raw_data.loc[:,y_var] 
X_test = raw_test.loc[:,X_vars] 
y_test = raw_test.loc[:,y_var] 

#make dummy variables 
X_train = pd.get_dummies(X_train, columns = categorical_vars) 
X_test = pd.get_dummies(X_test, columns=categorical_vars) 

print('train size', X_train.shape, '\ntest size', X_test.shape) 

# Train uncalibrated random forest classifier on whole train and evaluate on test data 
clf = RandomForestClassifier(n_estimators=100, max_depth=2) 
clf.fit(X_train, y_train.values.ravel()) 

print ('RF accuracy: TRAINING', clf.score(X_train,y_train)) 
print ('RF accuracy: TESTING', clf.score(X_test,y_test)) 

结果

raw data shape: (1000000, 15) 
train size (1000000, 125) 
test size (1000000, 125) 
RF accuracy: TRAINING 0.831456 
RF accuracy: TESTING 0.831456 

我的问题是,为什么是训练和测试精度完全一样?我跑了很多次,总是一模一样。有任何想法吗? (我已检查确保原始数据不同)

+0

有没有关于'raw_data'大小的信息。你是否期望在'raw_train'和'raw_test'集合中具有完全相同的观察数量? –

+2

您正在测试和培训相同的数据。 'X_train == X_test'是'True'。使用scikit-learn的'test_train_split'函数或某种形式的交叉验证迭代器。 –

回答

1

那么根本就在你的代码一个错字,因为每次你选择的所有行:

#split X and y in training and test 
X_train = raw_data.loc[:,X_vars] 
y_train = raw_data.loc[:,y_var] 
X_test = raw_test.loc[:,X_vars] 
y_test = raw_test.loc[:,y_var] 

您应该对其进行索引分别由一些指标,例如:X_train = raw_data.loc[:idx,X_vars]

相关问题