Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Carsten Eie Frigaard
GITMAL
Commits
56669d1f
Commit
56669d1f
authored
Sep 15, 2021
by
Carsten Eie Frigaard
Browse files
update
parent
5fa16d01
Changes
1
Hide whitespace changes
Inline
Side-by-side
L03/Extra/k-fold_demo.ipynb
View file @
56669d1f
...
...
@@ -126,253 +126,6 @@
" print()\n",
" PrintXy(X_val , y_val, \"_val \")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## K-fold Demo"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"MNIST keys=dict_keys(['data', 'target', 'frame', 'categories', 'feature_names', 'target_names', 'DESCR', 'details', 'url'])\n"
]
}
],
"source": [
"print(\"MNIST data get and unpack (slow)..\")\n",
"from sklearn.datasets import fetch_openml\n",
"mnist = fetch_openml('mnist_784', version=1)\n",
"print(f\" MNIST keys={mnist.keys()}\")"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Design Matrix setup..\n",
" X: (70000, 784), y: (70000,)\n",
"Train/test split..\n",
" Train: X: (60000, 784), y: (60000,)\n",
" Test : X: (10000, 784), y: (10000,)\n",
"SGD model setup and train..\n"
]
},
{
"data": {
"text/plain": [
"SGDClassifier(random_state=42)"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"print(\"Design Matrix setup..\")\n",
"\n",
"X, y = mnist[\"data\"], mnist[\"target\"]\n",
"y = y.astype(np.uint8)\n",
"\n",
"print(f\" X: {X.shape}, y: {y.shape}\")\n",
"\n",
"print(\"Train/test split..\")\n",
"X_train, X_test, y_train, y_test = X[:60000], X[60000:], y[:60000], y[60000:]\n",
"\n",
"print(f\" Train: X: {X_train.shape}, y: {y_train.shape}\")\n",
"print(f\" Test : X: {X_test.shape}, y: {y_test_5.shape}\")\n",
"\n",
"y_train_5 = (y_train == 5)\n",
"y_test_5 = (y_test == 5)\n",
"\n",
"print(\"SGD model setup and train..\")\n",
"\n",
"from sklearn.linear_model import SGDClassifier\n",
"\n",
"sgd_clf = SGDClassifier(max_iter=1000, tol=1e-3, random_state=42)\n",
"sgd_clf.fit(X_train, y_train_5)\n",
"\n",
"print(\"OK\")"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" ground_truth=False\n",
" predicted =[False]\n",
" ground_truth=True\n",
" predicted =[ True]\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAOcAAADnCAYAAADl9EEgAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF4ElEQVR4nO3dsU+TXRjG4bfGydEAI66go5FJdDRxo4zGUcfuIpManJ0wIf4L4KabicyOBlcZhZUZp2/4kvY52lJ6Y69r9MmJryU/T8LJ6ds7Pz/vgDzXZv0AwHDihFDihFDihFDihFDXG3O/yoXp6w37QzsnhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhLo+6wfg/54+fVrOj4+Py/nq6mo5v3///kTrp2lhYWHk7NatW5f4JBnsnBBKnBBKnBBKnBBKnBBKnBBKnBCqd35+Xs3LIeM5OTkZOVtbWyvX/vz5s5z3er1y3vh5l+snWfsn6x88eDByNhgMyrX9fr+chxv6wdk5IZQ4IZQ4IZQ4IZQ4IZQ4IZQrYzNQXftqHZW8f/++nD9//rycV8c4Xdd1BwcHI2crKyvl2h8/fpTzluq62s7OTrn29u3b5bz17InsnBBKnBBKnBBKnBBKnBBKnBBKnBDKOWeY1rWrSS0uLpbz1jlppbryNamtra1yfhXPMVvsnBBKnBBKnBBKnBBKnBBKnBBKnBDKOWeY1tdHzqv19fVZP8Kls3NCKHFCKHFCKHFCKHFCKHFCKHFCKOecM3B0dDRyNu37nFwddk4IJU4IJU4IJU4IJU4IJU4IJU4I5ZxzBvb390fO3OfkP3ZOCCVOCCVOCCVOCCVOCCVOCNVr/Ore7/Wn4Nq10f8ntq6MLS8vl/OFhYWxnulPvHjxopz3+/2p/d3/uKE/dDsnhBInhBInhBInhBInhBInhBInhHJlbArevHlTzie5FjbtK2Wnp6cjZ5ubm+Xaz58/l/NHjx6N9Uzzys4JocQJocQJocQJocQJocQJocQJodznHEP1Cr+u67q1tbVyfnZ2NnK2vb1drh0MBuV80vuc1Tnn0tJSubY1//LlSzlfXV0t5/8w9znhKhEnhBInhBInhBInhBInhBInhHKfcwzv3r0r59U5ZtfV9xpfvXo11jNdlOqcdGtrq1y7s7NTzg8PD8v5HJ9zDmXnhFDihFDihFDihFDihFDihFDihFDOOcfw7Nmzct56x+br168v8nEuzcbGRjl/+/btJT3JfLBzQihxQihxQihxQihxQihxQihHKWNYXl4u57u7u5f0JJfr69ev5XzaryecN3ZOCCVOCCVOCCVOCCVOCCVOCCVOCOWcc4j9/f1yvre3V84/ffp0kY8T4+PHj+W8dVWOv2PnhFDihFDihFDihFDihFDihFDihFC9xh28ubygd+/evXJevSav6672OefJycnI2dLSUrm2dc75/fv3cj7HrwAc+sHZOSGUOCGUOCGUOCGUOCGUOCGUOCHUXN7nrM7yuq7rTk9Py3nrFYDJWv/2x48fj5y1zjG3t7fL+RyfY47FzgmhxAmhxAmhxAmhxAmhxAmh5vIoZXFxsZzfvHmznP/69esiH+dCHR0dlfOXL1+W82/fvo2c3b17t1w7GAzKOX/HzgmhxAmhxAmhxAmhxAmhxAmhxAmh5vKcs+XOnTvl/MOHD+W89RWSGxsbI2cHBwfl2sPDw3Leek3f2dlZOd/c3Bw5293dLde2vjKUv2PnhFDihFDihFDihFDihFDihFDihFBeAThE607kw4cPy3nrqzWrz7z19ZONn1fX7/fL+ZMnTyZaz1R4BSBcJeKEUOKEUOKEUOKEUOKEUOKEUM45x3B8fFzO9/b2ynl1J7O669l1Xbe+vl7OV1ZWyvmNGzfKOTPhnBOuEnFCKHFCKHFCKHFCKHFCKHFCKOecMHvOOeEqESeEEieEEieEEieEEieEEieEEieEEieEEieEEieEEieEEieEEieEEieEEieEEieEEieEEieEEieEEieEEieEut6YD/3KPmD67JwQSpwQSpwQSpwQSpwQSpwQ6jeG1uak32Dk2AAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"import matplotlib as mpl\n",
"import matplotlib.pyplot as plt\n",
"\n",
"\n",
"def plot_digit(data):\n",
" image = data.reshape(28, 28)\n",
" plt.imshow(image, cmap = mpl.cm.binary,\n",
" interpolation=\"nearest\")\n",
" plt.axis(\"off\")\n",
"\n",
"def TestPredict(n):\n",
" some_digit = X_test[n]\n",
" ground_truth = y_test_5[n]\n",
" \n",
" plot_digit(some_digit)\n",
" y_pred=sgd_clf.predict([some_digit])\n",
" \n",
" print(f\" ground_truth={ground_truth}\")\n",
" print(f\" predicted ={y_pred}\")\n",
" \n",
"TestPredict(42)\n",
"TestPredict(45)"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"K-fold demo..\n",
"MyKFoldSplit(clf, X, y, kfolds=18)..\n",
" FOLD 0: accuracy=0.96, precision=0.80, recall=0.81, F1=0.81\n",
" FOLD 1: accuracy=0.97, precision=0.86, recall=0.77, F1=0.82\n",
" FOLD 2: accuracy=0.97, precision=0.89, recall=0.81, F1=0.85\n",
" FOLD 3: accuracy=0.96, precision=0.79, recall=0.76, F1=0.77\n",
" FOLD 4: accuracy=0.95, precision=0.69, recall=0.90, F1=0.78\n",
" FOLD 5: accuracy=0.97, precision=0.90, recall=0.78, F1=0.83\n",
" FOLD 6: accuracy=0.96, precision=0.77, recall=0.79, F1=0.78\n",
" FOLD 7: accuracy=0.97, precision=0.90, recall=0.74, F1=0.81\n",
" FOLD 8: accuracy=0.97, precision=0.89, recall=0.72, F1=0.80\n",
" FOLD 9: accuracy=0.96, precision=0.80, recall=0.78, F1=0.79\n",
" FOLD 10: accuracy=0.93, precision=0.59, recall=0.90, F1=0.71\n",
" FOLD 11: accuracy=0.97, precision=0.88, recall=0.75, F1=0.81\n",
" FOLD 12: accuracy=0.94, precision=0.63, recall=0.87, F1=0.73\n",
" FOLD 13: accuracy=0.97, precision=0.86, recall=0.76, F1=0.81\n",
" FOLD 14: accuracy=0.94, precision=0.64, recall=0.88, F1=0.74\n",
" FOLD 15: accuracy=0.94, precision=0.95, recall=0.35, F1=0.51\n",
" FOLD 16: accuracy=0.97, precision=0.83, recall=0.85, F1=0.84\n",
" FOLD 17: accuracy=0.96, precision=0.81, recall=0.66, F1=0.73\n",
"Final test scores..\n",
" accuracy=0.95, precision=0.66, recall=0.88, F1=0.76\n",
"OK\n"
]
}
],
"source": [
"from sklearn.model_selection import StratifiedKFold\n",
"from sklearn.base import clone\n",
"from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score\n",
"\n",
"def PrintScores(y_true, y_pred, i):\n",
" assert y_true.shape == y_pred.shape, f\"mismatch in shapes, y_true.shape={y_true.shape}, y_pred.shape={y_pred.shape}\"\n",
" a = accuracy_score (y_true, y_pred)\n",
" p = precision_score(y_true, y_pred)\n",
" r = recall_score (y_true, y_pred)\n",
" F1= f1_score (y_true, y_pred)\n",
" prefix = f\"FOLD {i:2d}: \" if i>=0 else \"\" \n",
" print(f\" {prefix}accuracy={a:.2f}, precision={p:.2f}, recall={r:.2f}, F1={F1:.2f}\")\n",
"\n",
"def MyKFoldSplit(clf, X, y, kfolds=3):\n",
"\n",
" print(f\"MyKFoldSplit(clf, X, y, kfolds={kfolds})..\")\n",
" skfolds = StratifiedKFold(n_splits=kfolds, random_state=42, shuffle=True)\n",
" \n",
" i=0\n",
" for train_index, val_index in skfolds.split(X, y):\n",
" clone_clf = clone(clf)\n",
" \n",
" X_train_folds = X[train_index]\n",
" y_train_folds = y[train_index]\n",
" X_val_fold = X[val_index]\n",
" y_val_fold = y[val_index]\n",
"\n",
" clone_clf.fit(X_train_folds, y_train_folds)\n",
"\n",
" y_pred = clone_clf.predict(X_val_fold)\n",
"\n",
" PrintScores(y_val_fold, y_pred, i)\n",
" i += 1\n",
"\n",
" #n_correct = sum(y_pred == y_val_fold)\n",
" #print(n_correct / len(y_pred)) \n",
" #\n",
" # My : print 0.95035 0.96035 and 0.9604\n",
" # Gereon: prints 0.9502, 0.96565 and 0.96495\n",
" \n",
"print(\"K-fold demo..\")\n",
"MyKFoldSplit(sgd_clf, X_train, y_train_5, 18)\n",
"print(\"OK\")"
]
},
{
"cell_type": "code",
"execution_count": 69,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Final test scores..\n",
" train yet a model with all train data..\n",
" predict on test data..\n",
" accuracy=0.95, precision=0.66, recall=0.88, F1=0.76\n",
"OK\n"
]
}
],
"source": [
"print(\"Final test scores..\")\n",
"\n",
"print(\" train yet a model with all train data..\")\n",
"sgd_clf.fit(X_train, y_train_5) \n",
"\n",
"print(\" predict on test data..\")\n",
"y_test_5_pred = sgd_clf.predict(X_test)\n",
"PrintScores(y_test_5, y_test_5_pred, -1)\n",
"\n",
"print(\"OK\")"
]
}
],
"metadata": {
...
...
%% Cell type:markdown id: tags:
# ITMAL L03
## K-fold CV demo
Code original from
*
https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.KFold.html?highlight=k%20fold#sklearn.model_selection.KFold
%% Cell type:code id: tags:
```
python
import
numpy
as
np
from
sklearn.model_selection
import
KFold
from
libitmal
import
utils
as
itmalutils
X
=
np
.
array
([[
1
,
2
],
[
3
,
4
],
[
5
,
6
],
[
7
,
8
],
[
-
1
,
-
2
]])
y
=
np
.
array
([
1
,
2
,
3
,
4
,
5
])
kf
=
KFold
(
n_splits
=
2
)
# shuffle=True, random_state=42)
print
(
f
"K-fold CV demo..
\n
"
)
print
(
f
"kf=
{
kf
}
\n
"
)
print
(
f
"Splits on X=
{
kf
.
get_n_splits
(
X
)
}
\n
"
)
def
PrintXy
(
X
,
y
,
msg
=
""
):
assert
X
.
ndim
==
2
assert
y
.
ndim
==
1
assert
X
.
shape
[
0
]
==
y
.
shape
[
0
]
itmalutils
.
PrintMatrix
(
X
,
f
" X
{
msg
}
="
)
print
(
""
)
itmalutils
.
PrintMatrix
(
y
,
f
" y
{
msg
}
="
)
PrintXy
(
X
,
y
)
print
(
"
\n
OK"
)
```
%% Output
K-fold CV demo..
kf=KFold(n_splits=2, random_state=None, shuffle=False)
Splits on X=2
X=[[ 1 2]
[ 3 4]
[ 5 6]
[ 7 8]
[-1 -2]]
y=[1 2 3 4 5]
OK
%% Cell type:code id: tags:
```
python
n
=
0
for
train_index
,
val_index
in
kf
.
split
(
X
):
n
+=
1
print
(
f
"
\n
ITERATION: n=
{
n
}
\n
"
)
print
(
f
" TRAIN indexes:
{
train_index
}
\n
VALIDATE indexes:
{
val_index
}
\n
"
)
#print(f"type(train_index)={type(train_index)}, train_index.dtype={train_index.dtype}")
X_train
,
X_val
=
X
[
train_index
],
X
[
val_index
]
y_train
,
y_val
=
y
[
train_index
],
y
[
val_index
]
PrintXy
(
X_train
,
y_train
,
"_train"
)
print
()
PrintXy
(
X_val
,
y_val
,
"_val "
)
```
%% Output
ITERATION: n=1
TRAIN indexes: [3 4]
VALIDATE indexes: [0 1 2]
X_train=[[ 7 8]
[-1 -2]]
y_train=[4 5]
X_val =[[1 2]
[3 4]
[5 6]]
y_val =[1 2 3]
ITERATION: n=2
TRAIN indexes: [0 1 2]
VALIDATE indexes: [3 4]
X_train=[[1 2]
[3 4]
[5 6]]
y_train=[1 2 3]
X_val =[[ 7 8]
[-1 -2]]
y_val =[4 5]
%% Cell type:markdown id: tags:
## K-fold Demo
%% Cell type:code id: tags:
```
python
print
(
"MNIST data get and unpack (slow).."
)
from
sklearn.datasets
import
fetch_openml
mnist
=
fetch_openml
(
'mnist_784'
,
version
=
1
)
print
(
f
" MNIST keys=
{
mnist
.
keys
()
}
"
)
```
%% Output
MNIST keys=dict_keys(['data', 'target', 'frame', 'categories', 'feature_names', 'target_names', 'DESCR', 'details', 'url'])
%% Cell type:code id: tags:
```
python
print
(
"Design Matrix setup.."
)
X
,
y
=
mnist
[
"data"
],
mnist
[
"target"
]
y
=
y
.
astype
(
np
.
uint8
)
print
(
f
" X:
{
X
.
shape
}
, y:
{
y
.
shape
}
"
)
print
(
"Train/test split.."
)
X_train
,
X_test
,
y_train
,
y_test
=
X
[:
60000
],
X
[
60000
:],
y
[:
60000
],
y
[
60000
:]
print
(
f
" Train: X:
{
X_train
.
shape
}
, y:
{
y_train
.
shape
}
"
)
print
(
f
" Test : X:
{
X_test
.
shape
}
, y:
{
y_test_5
.
shape
}
"
)
y_train_5
=
(
y_train
==
5
)
y_test_5
=
(
y_test
==
5
)
print
(
"SGD model setup and train.."
)
from
sklearn.linear_model
import
SGDClassifier
sgd_clf
=
SGDClassifier
(
max_iter
=
1000
,
tol
=
1e-3
,
random_state
=
42
)
sgd_clf
.
fit
(
X_train
,
y_train_5
)
print
(
"OK"
)
```
%% Output
Design Matrix setup..
X: (70000, 784), y: (70000,)
Train/test split..
Train: X: (60000, 784), y: (60000,)
Test : X: (10000, 784), y: (10000,)
SGD model setup and train..
SGDClassifier(random_state=42)
%% Cell type:code id: tags:
```
python
%
matplotlib
inline
import
matplotlib
as
mpl
import
matplotlib.pyplot
as
plt
def
plot_digit
(
data
):
image
=
data
.
reshape
(
28
,
28
)
plt
.
imshow
(
image
,
cmap
=
mpl
.
cm
.
binary
,
interpolation
=
"nearest"
)
plt
.
axis
(
"off"
)
def
TestPredict
(
n
):
some_digit
=
X_test
[
n
]
ground_truth
=
y_test_5
[
n
]
plot_digit
(
some_digit
)
y_pred
=
sgd_clf
.
predict
([
some_digit
])
print
(
f
" ground_truth=
{
ground_truth
}
"
)
print
(
f
" predicted =
{
y_pred
}
"
)
TestPredict
(
42
)
TestPredict
(
45
)
```
%% Output
ground_truth=False
predicted =[False]
ground_truth=True
predicted =[ True]
%% Cell type:code id: tags:
```
python
from
sklearn.model_selection
import
StratifiedKFold
from
sklearn.base
import
clone
from
sklearn.metrics
import
accuracy_score
,
precision_score
,
recall_score
,
f1_score
def
PrintScores
(
y_true
,
y_pred
,
i
):
assert
y_true
.
shape
==
y_pred
.
shape
,
f
"mismatch in shapes, y_true.shape=
{
y_true
.
shape
}
, y_pred.shape=
{
y_pred
.
shape
}
"
a
=
accuracy_score
(
y_true
,
y_pred
)
p
=
precision_score
(
y_true
,
y_pred
)
r
=
recall_score
(
y_true
,
y_pred
)
F1
=
f1_score
(
y_true
,
y_pred
)
prefix
=
f
"FOLD
{
i
:
2
d
}
: "
if
i
>=
0
else
""
print
(
f
"
{
prefix
}
accuracy=
{
a
:
.
2
f
}
, precision=
{
p
:
.
2
f
}
, recall=
{
r
:
.
2
f
}
, F1=
{
F1
:
.
2
f
}
"
)
def
MyKFoldSplit
(
clf
,
X
,
y
,
kfolds
=
3
):
print
(
f
"MyKFoldSplit(clf, X, y, kfolds=
{
kfolds
}
).."
)
skfolds
=
StratifiedKFold
(
n_splits
=
kfolds
,
random_state
=
42
,
shuffle
=
True
)
i
=
0
for
train_index
,
val_index
in
skfolds
.
split
(
X
,
y
):
clone_clf
=
clone
(
clf
)
X_train_folds
=
X
[
train_index
]
y_train_folds
=
y
[
train_index
]
X_val_fold
=
X
[
val_index
]
y_val_fold
=
y
[
val_index
]
clone_clf
.
fit
(
X_train_folds
,
y_train_folds
)
y_pred
=
clone_clf
.
predict
(
X_val_fold
)
PrintScores
(
y_val_fold
,
y_pred
,
i
)
i
+=
1
#n_correct = sum(y_pred == y_val_fold)
#print(n_correct / len(y_pred))
#
# My : print 0.95035 0.96035 and 0.9604
# Gereon: prints 0.9502, 0.96565 and 0.96495
print
(
"K-fold demo.."
)
MyKFoldSplit
(
sgd_clf
,
X_train
,
y_train_5
,
18
)
print
(
"OK"
)
```
%% Output
K-fold demo..
MyKFoldSplit(clf, X, y, kfolds=18)..
FOLD 0: accuracy=0.96, precision=0.80, recall=0.81, F1=0.81
FOLD 1: accuracy=0.97, precision=0.86, recall=0.77, F1=0.82
FOLD 2: accuracy=0.97, precision=0.89, recall=0.81, F1=0.85
FOLD 3: accuracy=0.96, precision=0.79, recall=0.76, F1=0.77
FOLD 4: accuracy=0.95, precision=0.69, recall=0.90, F1=0.78
FOLD 5: accuracy=0.97, precision=0.90, recall=0.78, F1=0.83
FOLD 6: accuracy=0.96, precision=0.77, recall=0.79, F1=0.78
FOLD 7: accuracy=0.97, precision=0.90, recall=0.74, F1=0.81
FOLD 8: accuracy=0.97, precision=0.89, recall=0.72, F1=0.80
FOLD 9: accuracy=0.96, precision=0.80, recall=0.78, F1=0.79
FOLD 10: accuracy=0.93, precision=0.59, recall=0.90, F1=0.71
FOLD 11: accuracy=0.97, precision=0.88, recall=0.75, F1=0.81
FOLD 12: accuracy=0.94, precision=0.63, recall=0.87, F1=0.73
FOLD 13: accuracy=0.97, precision=0.86, recall=0.76, F1=0.81
FOLD 14: accuracy=0.94, precision=0.64, recall=0.88, F1=0.74
FOLD 15: accuracy=0.94, precision=0.95, recall=0.35, F1=0.51
FOLD 16: accuracy=0.97, precision=0.83, recall=0.85, F1=0.84
FOLD 17: accuracy=0.96, precision=0.81, recall=0.66, F1=0.73
Final test scores..
accuracy=0.95, precision=0.66, recall=0.88, F1=0.76
OK
%% Cell type:code id: tags:
```
python
print
(
"Final test scores.."
)
print
(
" train yet a model with all train data.."
)
sgd_clf
.
fit
(
X_train
,
y_train_5
)
print
(
" predict on test data.."
)
y_test_5_pred
=
sgd_clf
.
predict
(
X_test
)
PrintScores
(
y_test_5
,
y_test_5_pred
,
-
1
)
print
(
"OK"
)
```
%% Output
Final test scores..
train yet a model with all train data..
predict on test data..
accuracy=0.95, precision=0.66, recall=0.88, F1=0.76
OK
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment