【发布时间】:2017-04-23 09:29:36
【问题描述】:
我是 scikit 的新手,在尝试让学习者适应采样训练集时出现索引超出范围错误
这里是错误发生的地方
def train_predict(learner, sample_size, X_train, y_train, X_test, y_test):
results = {}
start = time() # Get start time
learner.fit(X_train[sample_size],y_train[sample_size])
end = time() # Get end time
results['train_time'] = end-start
start = time() # Get start time
predictions_test = learner.predict(X_test)
predictions_train = learner.predict(X_train.head(300))
end = time() # Get end time
results['pred_time'] = end-start
results['acc_train'] = accuracy_score(y_train.head(300),predictions_train)
results['acc_test'] = accuracy_score(y_test,predictions_test)
results['f_train'] = f_score(y_train.head(300),predictions_train)
results['f_test'] = f_score(y_test,predictions_test)
print "{} trained on {} samples.".format(learner.__class__.__name__, sample_size)
return results
这里是主要代码
clf_A = GaussianNB()
clf_B = tree.DecisionTreeClassifier()
clf_C = SVC()
samples_1 = random.sample(X_train.index,len(X_train)/100)
samples_10 = random.sample(X_train.index,len(X_train)/10)
samples_100 = X_train.index
results = {}
for clf in [clf_A, clf_B, clf_C]:
clf_name = clf.__class__.__name__
results[clf_name] = {}
for i, samples in enumerate([samples_1, samples_10, samples_100]):
results[clf_name][i] = \
train_predict(clf, samples, X_train, y_train, X_test, y_test)
vs.evaluate(results, accuracy, fscore)
错误在一行
---> 21 learner.fit(X_train[sample_size],y_train[sample_size])
它说
IndexError: indices are out-of-bounds
【问题讨论】:
-
您是否尝试打印
X_train的长度和sample_size的值? -
我做了,X_train 是 36177 samples_1 是 361,samples_10 是 3617
-
不,我的意思是这个错误出现在哪个迭代上?
samples_100呢? -
在
train_predict(clf, samples, X_train, y_train, X_test, y_test)方法调用中,您正在传递sample,但是train_predict方法需要sample_size...
标签: python pandas numpy scikit-learn