python中predict函数和score函数的区别_python sklearn:准确度和学习度曲线得分有什么区别?...

我使用pythonsklearn(版本0.17)来选择数据集上的理想模型。为此,我遵循以下步骤:使用cross_validation.train_test_split和test_size = 0.2拆分数据集。在

使用GridSearchCV在训练集中选择理想的k近邻分类器。在

将GridSearchCV返回的分类器传递给plot_learning_curve。plot_learning_curve给出了如下图。在

在获得的测试集上运行GridSearchCV返回的分类器。在

从图中我们可以看出,最大训练规模的得分约为0.43。此分数是sklearn.learning_curve.learning_curve函数返回的分数。在

但是当我在测试集中运行最好的分类器时,我得到的准确度得分为0.61,由sklearn.metrics.accuracy_score(正确预测的标签/标签数量)返回

链接到图像:

这是我使用的代码。我没有包含plot_learning_curve函数,因为它需要很大的空间。我从here取了plot_learning_curveimport pandas as pd

import numpy as np

from sklearn.neighbors import KNeighborsClassifier

from sklearn.metrics import accuracy_score

from sklearn.metrics import classification_report

from matplotlib import pyplot as plt

import sys

from sklearn import cross_validation

from sklearn.learning_curve import learning_curve

from sklearn.grid_search import GridSearchCV

from sklearn.cross_validation import train_test_split

filename = sys.argv[1]

data = np.loadtxt(fname = filename, delimiter = ',')

X = data[:, 0:-1]

y = data[:, -1] # last column is the label column

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=2)

params = {'n_neighbors': [2, 3, 5, 7, 10, 20, 30, 40, 50],

'weights': ['uniform', 'distance']}

clf = GridSearchCV(KNeighborsClassifier(), param_grid=params)

clf.fit(X_train, y_train)

y_true, y_pred = y_test, clf.predict(X_test)

acc = accuracy_score(y_pred, y_test)

print 'accuracy on test set =', acc

print clf.best_params_

for params, mean_score, scores in clf.grid_scores_:

print "%0.3f (+/-%0.03f) for %r" % (

mean_score, scores.std() / 2, params)

y_true, y_pred = y_test, clf.predict(X_test)

#pred = clf.predict(np.array(features_test))

acc = accuracy_score(y_pred, y_test)

print classification_report(y_true, y_pred)

print 'accuracy last =', acc

print

plot_learning_curve(clf, "KNeighborsClassifier",

X, y,

train_sizes=np.linspace(.05, 1.0, 5))

这正常吗?我能理解分数可能会有一些差异,但这是0.18的差异,换算成百分比后是43%对61%。分类报告也给出了平均0.61的召回率。在

我做错什么了吗?在learning_curve计算分数的方式上有区别吗?{{cd13>函数也试图让它的准确度有任何差别。在

任何建议都会大有帮助。在

我使用的是葡萄酒质量(白色)data set from UCI,并且在运行代码之前删除了头。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,你可以按照以下步骤使用DecisionTreeClassifier对digits数据集进行分类,并输出分类准确度: 1. 导入需要的库和数据集: ```python from sklearn.datasets import load_digits from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score digits = load_digits() X = digits.data y = digits.target ``` 2. 将数据集分为训练集和测试集: ```python X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) ``` 3. 创建分类器并训练模型: ```python clf = DecisionTreeClassifier(max_depth=5, min_samples_split=2, random_state=42) clf.fit(X_train, y_train) ``` 4. 对测试集进行预测并输出准确度: ```python y_pred = clf.predict(X_test) accuracy = accuracy_score(y_test, y_pred) print("分类准确度为:", accuracy) ``` 在上述代码,我们使用了DecisionTreeClassifier分类器,并设置了max_depth和min_samples_split参数来调整决策树的深和节点分裂的最小样本数,以达到更好的分类效果。同时,我们使用train_test_split函数将数据集分为训练集和测试集,并使用accuracy_score函数输出分类准确度。 你可以尝试调整max_depth和min_samples_split参数的值,以达到更好的分类效果。同时,你也可以尝试使用其他分类器,比如RandomForestClassifier和GradientBoostingClassifier等,来进行分类并比较它们的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值