Manuel Python pour acquérir des compétences pratiques
Si vous lancez une image numérique appropriée avec python3 digits.py $ {fileName}
, cela prédira.
digits.py
import os, sys, math
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets, model_selection, svm, metrics
from sklearn.externals import joblib
from PIL import Image
#Nom du fichier de données du modèle
DIGITS_PKL = "digit-clf.pkl"
#Lire des données numériques manuscrites
digits = datasets.load_digits()
#Validation croisée
#Divisez aléatoirement les données pour la formation et les tests
data_train, data_test, label_train, label_test = \
model_selection.train_test_split(digits.data, digits.target)
#Créer un modèle prédictif
def create_model():
#Construction de modèles
clf = svm.SVC(gamma=0.001)
# clf = svm.LinearSVC()
# from sklearn.ensemble import RandomForestClassifier
# clf = RandomForestClassifier()
#Apprentissage
clf.fit(data_train, label_train)
#Enregistrer le modèle de prédiction
joblib.dump(clf, DIGITS_PKL)
print("Enregistré le modèle de prédiction=", DIGITS_PKL)
return clf
#Sélectionnez un modèle de prédiction
def select_model():
#Charger le fichier de modèle
if not os.path.exists(DIGITS_PKL):
clf = create_model() #Générer sans modèle
clf = joblib.load(DIGITS_PKL)
return clf
#Prédire les nombres à partir des données
def predict_digits(data,clf):
n = clf.predict([data])
print("résultat du jugement=", n)
#Convertir des images numériques manuscrites en tableau de données en échelle de gris 8x8
def image_to_data(imagefile):
image = Image.open(imagefile).convert('L') #Conversion de l'échelle de gris
image = image.resize((8, 8), Image.ANTIALIAS)
img = np.asarray(image, dtype=float)
img = np.floor(16 - 16 * (img / 256)) #Exemple d'opération de ligne
#Afficher l'image convertie
plt.imshow(img)
plt.gray()
plt.show()
img = img.flatten()
print("img=",img)
return img
#Évaluer le modèle
def evaluate_model(clf):
predict = clf.predict(data_test)
return predict
#Créer un rapport à partir des prévisions
def show_report(predict, clf):
ac_score = metrics.accuracy_score(label_test, predict)
cl_report = metrics.classification_report(label_test, predict)
print('Informations sur le trieur =', clf)
print('Taux de réponse correct =', ac_score)
print('Rapport =', cl_report)
# precision:précision, recall:Taux de rappel (taux de réponse correct),
# f1-score:Moyenne harmonisée d'exactitude et de rappel, support:Nombre de données sur l'étiquette correcte
def main():
#Obtenir des arguments de ligne de commande
if len(sys.argv) <= 1:
print("USAGE:")
print("python3 predict_digit.py imagefile")
return
imagefile = sys.argv[1]
data = image_to_data(imagefile)
clf = select_model();
predict_digits(data,clf)
show_report(evaluate_model(clf),clf)
if __name__ == '__main__':
main()
résultat
img= [ 0. 0. 0. 0. 0. 0. 0. 0. 1. 9. 7. 7. 7. 7. 2. 0. 1. 8.
0. 1. 0. 0. 0. 0. 1. 6. 0. 0. 0. 0. 0. 0. 1. 9. 5. 6.
5. 1. 0. 0. 0. 4. 3. 3. 4. 8. 1. 0. 0. 0. 0. 0. 2. 9.
2. 0. 0. 3. 8. 8. 8. 2. 0. 0.]
résultat du jugement= [5]
Informations sur le trieur = SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
decision_function_shape=None, degree=3, gamma=0.001, kernel='rbf',
max_iter=-1, probability=False, random_state=None, shrinking=True,
tol=0.001, verbose=False)
Taux de réponse correct = 0.993333333333
Rapport = rappel de précision f1-score support
0 1.00 1.00 1.00 38
1 1.00 1.00 1.00 48
2 1.00 1.00 1.00 40
3 0.98 0.98 0.98 47
4 1.00 1.00 1.00 54
5 0.98 0.98 0.98 47
6 0.98 1.00 0.99 46
7 1.00 1.00 1.00 42
8 1.00 1.00 1.00 47
9 1.00 0.98 0.99 41
avg / total 0.99 0.99 0.99 450
Recommended Posts