我按照本教程创建了一个简单的图像分类脚本:
https://blog.hyperiondev.com/index.php/2019/02/18/machine-learning/
train_data = scipy.io.loadmat('extra_32x32.mat')
# extract the images and labels from the dictionary object
X = train_data['X']
y = train_data['y']
X = X.reshape(X.shape[0]*X.shape[1]*X.shape[2],X.shape[3]).T
y = y.reshape(y.shape[0],)
X, y = shuffle(X, y, random_state=42)
....
clf = RandomForestClassifier()
print(clf)
start_time = time.time()
RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',
max_depth=None, max_features='auto', max_leaf_nodes=None,
min_impurity_split=1e-07, min_samples_leaf=1,
min_samples_split=2, min_weight_fraction_leaf=0.0,
n_estimators=10, n_jobs=1, oob_score=False, random_state=None,
verbose=0, warm_start=False)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
clf.fit(X_train, y_train)
preds = clf.predict(X_test)
print("Accuracy:", accuracy_score(y_test,preds))
它给我的准确度约为0.7。
是否存在可视化或显示模型何时/何时过度拟合的地方?我相信可以通过训练模型来证明这一点,直到我们看到训练的准确性正在提高并且验证数据正在减少。但是如何在代码中这样做?
答案 0 :(得分:0)
有多种方法可以测试过度拟合和欠拟合。如果您想专门查看训练成绩和测试成绩并进行比较,可以使用sklearns cross_validate [https://scikit-learn.org/stable/modules/generation/sklearn.model_selection.cross_validate.html#sklearn.model_selection。 cross_validate]。如果您阅读了该文档,它将返回给您一本包含火车分数的字典(如果以train_score = True的形式提供),并以您提供的指标来测试分数。
示例代码
模型= RandomForestClassifier(n_estimators = 1000,random_state = 1,standard ='entropy',bootstrap = True,oob_score = True,verbose = 1) cv_dict = cross_validate(model,X,y,return_train_score = True)
您还可以简单地使用火车测试拆分创建一个支持测试集,并使用测试数据集比较您的训练成绩和测试成绩。
答案 1 :(得分:0)
另一种选择是使用像 Optuna 这样的库,它会为您测试各种超参数,您可以使用上述方法。