Scikit在测试中学习高精度

2024-04-25 17:11:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含100000行和129列的数据集。我使用pandas将其加载到一个数据帧中,并将集合分成两个子集:父集合的训练(70%)和测试(30%)。这是我用来拆分的代码

def makeSample(df):
  test_size = len(df.index) * 30 / 100
  rows = random.sample(df.index, test_size)

  testing = df.ix[rows]
  training = df.drop(rows)

  print "Number of testing set %s\n" % len(testing.index)
  print "Number of training set %s\n" % len(training.index)

  return training, testing

def split9Folds(df):
  for x in xrange(1, 10):
    training, testing = makeSample(df)

    training.to_csv(r'split/training_%s.csv' % x, header=None, index=None, sep=',', mode='w')
    testing.to_csv(r'split/testing_%s.csv' % x, header=None, index=None, sep=',', mode='w')

分裂过程将采取9倍。总的来说,我有9对培训/测试文件。然后我使用Scikit-learn中的决策树进行训练

^{pr2}$

然后使用测试文件来测试精度。当测试准确度得分总是1(100%准确度)时,让我吃惊的是

t_file = "split/testing_9.csv"
t_df = pd.read_csv(t_file, sep=',', header=None)
t_df.columns = xrange(1, len(t_df.columns) + 1)
t_df.drop(t_df.columns[[4]], axis=1, inplace=True)

t_features_list = t_df[features_column]
t_target_list = t_df[target_column]

score = clf.score(t_features_list, t_target_list)

print score

看起来我在训练过程中有过拟合问题或其他问题。所有测试集也会发生这种情况。你能给我一些建议吗?在


Tags: columnscsvnonedfindexlentrainingtesting
1条回答
网友
1楼 · 发布于 2024-04-25 17:11:02

也许你混淆了决策树(单决策树)和一些集成元估计器(许多分类器,如决策树)的概念。 我看不出你的成绩有什么问题。没有任何限制,决策树可以始终完美地分离数据集。因为它可以近似任何决策边界。你的案子就是这样。对DecisonTree的唯一限制是-min_samples_split=20。但与数据集大小(10万个样本)相比,20几乎算不上什么。在

如果你想建立更多的限制(通用)树-你可以玩最大深度,最小采样数分裂(增加它),最小采样数叶,etc。在

相关问题 更多 >

    热门问题