Bildverarbeitung zur Blattklassifizierung | von Jam Wong | Juni 2023

0
26


Wir teilen unsere Daten nun in die Zugvalidierungssätze (für die Rastersuche) und den Testsatz (für die Inferenz) auf.

X = df.drop(columns=['class',
'image']).copy().to_numpy()

y = df['class'].to_numpy()

X_trainval, X_test, y_trainval, y_test = train_test_split(
X, y, test_size=0.25, random_state=143, stratify=y
)

Wir definieren unsere Hyperparameter und die Kreuzvalidierungsstrategie für die Pipeline und passen das Modell an.

rng = np.random.RandomState(143)

skfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=rng)

pipeline = Pipeline([('scaler', StandardScaler()),
('classifier', LogisticRegression())])

param_grid = [
{
'classifier': [KNeighborsClassifier()],
'classifier__n_neighbors': [3, 5, 10, 15]
},
{
'classifier': [LogisticRegression(solver='saga', max_iter=10_000)],
'classifier__penalty': ['l1', 'l2'],
'classifier__C': [0.1, 1, 10]
},
{
'classifier': [SVC(random_state=rng)],
'classifier__kernel': ['linear', 'rbf'],
'classifier__C': [0.1, 1, 10]
},
{
'classifier': [RandomForestClassifier(random_state=rng)],
'classifier__n_estimators': [100, 150, 200],
'classifier__max_depth': [3, 5, 7]
},
{
'classifier': [GradientBoostingClassifier(random_state=rng)],
'classifier__n_estimators': [100, 150, 200],
'classifier__max_depth': [3, 5, 7]
}
]

gs = GridSearchCV(pipeline,
param_grid=param_grid,
cv=skfold,
verbose=1)

gs.match(X_trainval, y_trainval)

Dadurch erhalten wir ein optimales Modell, das die Blätter am genauesten klassifiziert. Der nächste Schritt besteht darin, dieses Modell anhand des Testsatzes zu bewerten.



Source link

HINTERLASSEN SIE EINE ANTWORT

Please enter your comment!
Please enter your name here