你好,我是机器学习的新手,正在进行一个基于犯罪预测的有趣项目。我之前遇到了一个错误,现在已经修复了,但不幸的是,以下代码块返回了一个新的错误。我使用的是UCI ML Repo提供的数据集。我查看了类似的帖子,但没有找到任何相关的解决方案。
错误信息如下:
ValueError Traceback (most recent call last)
<ipython-input-15-444381be2864> in <module>()
25 clf = tree.DecisionTreeClassifier(max_depth=3)
26 # clf = tree.DecisionTreeClassifier()
---> 27 clf = clf.fit(New_data, Y)
28 clf
29 fold=df['fold']
/root/.local/lib/python3.7/site-packages/sklearn/tree/_classes.py in fit(self, X, y, sample_weight, check_input, X_idx_sorted)
281 if len(y) != n_samples:
282 raise ValueError("Number of labels=%d does not match "--
> 283 "number of samples=%d" % (len(y), n_samples))
284 if not 0 <= self.min_weight_fraction_leaf <= 0.5:
285 raise ValueError("min_weight_fraction_leaf must in [0, 0.5]")
ValueError: Number of labels=1993 does not match number of samples=1994
回答:
错误表明你的“标签”比“样本”多了一个。这意味着你有一个额外的输入,而没有对应的输出。
然而,我认为这并不是你的真正问题。看起来你不小心使用了之前加载到内存中的数据,这些数据在维度上有问题。
在你的代码中,有以下部分:
df_d=pd.read_csv('communities-crime-full.csv')
这应该改为:
df=pd.read_csv('communities-crime-full.csv')
修改后的代码如下:
结果如下:
cross_val_accuracy is [0.81 0.825 0.805 0.8 0.82914573 0.77386935 0.85427136 0.83417085 0.80904523 0.8040201 ]
cross_val_accuracy_avg is 0.8144522613065327
cross_val_precision is [0.90740741 0.86290323 0.84677419 0.84 0.85826772 0.85714286 0.92105263 0.92592593 0.85950413 0.90566038]
cross_val_precision_avg is 0.8784638467535306
cross_val_recall is [0.77777778 0.856 0.84 0.84 0.872 0.768 0.84 0.8 0.832 0.768 ]
cross_val_recall_avg is 0.8193777777777778
看起来确实有一些学习在进行中!