Letztes Mal Kurs für maschinelles Lernen an der Tsukuba University: Lernen Sie sklearn, während Sie das Python-Skript in die Aufgabe aufnehmen (10) https://github.com/legacyworld/sklearn-basic
Kommentar auf Youtube: 6. (1) 58 Minuten 30 Sekunden Die Iris (Ayame) -Daten von sklearn werden verwendet, die folgenden Bedingungen werden jedoch zur Vereinfachung verwendet.
Klicken Sie hier für den Quellcode
python:Homework_5.4.py
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm,metrics
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
iris = load_iris()
# sepal width(Einseitige Breite),sepal length(Einseitige Länge)Nur benutzen
features = [0,1]
#Überlegen Sie einfach, ob virginica oder nicht
target = 2
X = iris.data[:,features]
y = iris.target
# y =Nicht 2(Nicht virginica)Wenn-1
y[np.where(np.not_equal(y,target))] = -1
y[np.where(np.equal(y,target))] = 1
#Nur Daten zeichnen
plt.figure(0,figsize=(5,5))
plt.scatter(X[:, 0][np.where(y==1)], X[:, 1][np.where(y==1)], color='b',label=iris.target_names[target])
plt.scatter(X[:, 0][np.where(y==-1)], X[:, 1][np.where(y==-1)], color='r',label=f"not {iris.target_names[target]}")
plt.xlabel(iris.feature_names[features[0]])
plt.ylabel(iris.feature_names[features[1]])
plt.legend()
plt.savefig("5.4_irisdata.png ")
# SVM (C=0.01)
clf = svm.SVC(kernel='linear', C=0.01)
clf.fit(X, y)
#ROC-Kurve
fpr,tpr,th = metrics.roc_curve(y,clf.decision_function(X))
plt.clf()
plt.plot(fpr,tpr)
plt.xlabel("False Positive Rate")
plt.ylabel("True Positive Rate")
plt.title("ROC")
plt.savefig("5.4_ROC_curve.png ")
#False Positive Rate ist 0.True Positive Rate in der Nähe von 2
index = np.where(fpr>=0.2)[0].tolist()[0]
print(f"FPR = {fpr[index-1]} TPR = {tpr[index-1]}")
print(f"FPR = {fpr[index]} TPR = {tpr[index]}")
#Zeichnen Sie, während Sie den Abschnitt ändern
for i in range(0,110,10):
dec = clf.decision_function(X)
#Verschieben Sie den Abschnitt vom Maximalwert zum Minimalwert
intercept = np.max(dec) - i/100*(np.max(dec)-np.min(dec))
#TPR und FPR
TP = np.where((np.signbit(dec-intercept)==False) & (np.signbit(y)==False))
FP = np.where((np.signbit(dec-intercept)==False) & (np.signbit(y)==True))
FPR = len(FP[0])/len(y)
TPR = len(TP[0])/len(y)
#Index der falschen Vorhersage
index = np.where(np.signbit(dec-intercept)!=np.signbit(y))
x_miss = X[index]
y_miss = y[index]
#Zeichnung
plt.clf()
plt.figure(0,figsize=(5,5))
plt.scatter(X[:, 0][np.where(y==1)], X[:, 1][np.where(y==1)], color='b',label=iris.target_names[target])
plt.scatter(X[:, 0][np.where(y==-1)], X[:, 1][np.where(y==-1)], color='r',label=f"not {iris.target_names[target]}")
plt.xlabel(iris.feature_names[features[0]])
plt.ylabel(iris.feature_names[features[1]])
plt.title(f"Decision boundary Moved {i}% {-intercept:.3f}\nFPR = {FPR:.3f} TPR = {TPR:.3f}")
#Entscheidungsgrenze zeichnen
xlim = plt.xlim()
ylim = plt.ylim()
#Machen Sie ein 30x30 Gitter
xx = np.linspace(xlim[0], xlim[1], 30)
yy = np.linspace(ylim[0], ylim[1], 30)
YY, XX = np.meshgrid(yy, xx)
xy = np.vstack([XX.ravel(), YY.ravel()]).T
#Klassifizierung in jedem Gitter
Z = clf.decision_function(xy).reshape(XX.shape)-intercept
#Zeichnen Sie Entscheidungsgrenzen mithilfe der Konturlinienebene=0 entspricht ihm
plt.contour(XX,YY,Z,levels=[0])
plt.scatter(x_miss[:,0][np.where(y_miss==1)],x_miss[:,1][np.where(y_miss==1)],color='b',s=100,linewidth=1, facecolors='none', edgecolors='k')
plt.scatter(x_miss[:,0][np.where(y_miss==-1)],x_miss[:,1][np.where(y_miss==-1)],color='b',s=100,linewidth=1, facecolors='none', edgecolors='k')
plt.legend()
plt.savefig(f"5.4_decision_boundary_{i}.png ")
#C bis 0.01 bis 1,AUC-Punktzahl beim Wechsel zu 000
c_values = [0.01,0.02,0.05,0.1,0.2,0.5,1,2,5,10,100,1000]
aucs = []
# TRAIN/VALICATION/Für TEST in 3 geteilt
X_tr_val,X_test,y_tr_val,y_test = train_test_split(X,y,test_size=0.2,random_state=1)
X_tr,X_val,y_tr,y_val = train_test_split(X_tr_val,y_tr_val,test_size=0.2,random_state=1)
print(len(X_tr_val),len(X_test),len(X_tr),len(X_val))
for c_value in c_values:
clf = svm.SVC(kernel='linear',C=c_value).fit(X_tr,y_tr)
dec = clf.decision_function(X_val)
auc = metrics.roc_auc_score(y_val,dec)
aucs.append(auc)
#Mit dem besten C neu berechnet
best_c_index = np.argmax(aucs)
best_clf = svm.SVC(kernel='linear', C=c_values[best_c_index]).fit(X_tr_val,y_tr_val)
test_predict = best_clf.predict(X_test)
print(f"Best value of parameter C c_values[best_c_index]")
plt.clf()
plt.plot(c_values,aucs,label="AUC Scores")
plt.plot(c_values[best_c_index],aucs[best_c_index],marker ='o',markersize=10,label="Best Score")
plt.legend()
plt.xscale("log")
plt.savefig("5.4_AUC.png ")
In der Vorlesung wurde der Abschnitt (Schwelle) verschoben, aber in diesem Programm wird der Abschnitt alle 10% gezeichnet. Die Erklärung, warum Sie dies tun, ist hier sehr detailliert. https://qiita.com/TsutomuNakamura/items/ef963381e5d2768791d4
Die Vorhersagen beim Verschieben der Abschnitte und ihre Fehler (eingekreist) sind unten aufgeführt.
Je höher der Schwellenwert, desto höher die Genauigkeit. Mit anderen Worten, etwas, das nicht virginica ist, wird nicht virginica hergestellt, aber es gibt mehr Fälle, in denen virginica nicht virginica ist. Im Gegenteil, wenn der Schwellenwert gesenkt wird, kann Virginica korrekt als Virginica beurteilt werden, aber Nicht-Virginica ist auch Virginica.
Ersteres ist ein strafrechtliches Urteil (einige Kriminelle können übersehen werden, aber falsche Anschuldigungen sind nicht erlaubt) Letzteres ist die Beurteilung des Krebs-Screenings (ein gutartiger Tumor, der kein Krebs ist, wird ebenfalls als Krebs eingestuft und macht dem Patienten zusätzliche Angst, aber es gibt kein Problem, da der Schaden nur beängstigend ist).
Die ROC-Kurve sieht so aus
Nun ist dieses Problem in der Herausforderung "Wenn die Wahrscheinlichkeit, virginica vorherzusagen, obwohl es nicht virginica ist, auf 0,2 oder weniger unterdrückt wird, wie hoch ist die maximale Wahrscheinlichkeit, virginica-Daten korrekt als virginica vorherzusagen?" Kurz gesagt, was ist der Maximalwert der True Positive Rate bei False Positve Rate <= 0,2? Mit anderen Worten. Dies ist die Ausgabe innerhalb des Programms
FPR = 0.18 TPR = 0.8
FPR = 0.2 TPR = 0.8
Wenn der FPR ungefähr 0,2 beträgt, beträgt der TPR ungefähr 0,8, sodass die Wahrscheinlichkeit, eine korrekte Vorhersage zu treffen, 80% beträgt.
AUC Das letzte Problem besteht darin, die Regularisierungsparameter zu verschieben und die AUC zu zeichnen. Zunächst werden die Daten zur Vorbereitung in drei Teile unterteilt.
--X_tr_val, y_tr_val: 120 Stück --Daten für SVC erneut, nachdem das beste C entschieden wurde --X_test, y_test: 30 Stück --Daten für die endgültige Berechnung des Genauigkeitswerts --X_tr, y_tr: 96 Stück
AUC-Grafik
In der Vorlesung wird Predict_Proba im AUC-Teil verwendet, aber ich habe Decision_Function verwendet, weil ich einige Artikel gesehen habe, in denen Predict_proba manchmal falsch war. https://qiita.com/rawHam/items/3bcb6a68a533f2b82a85
Kurs für maschinelles Lernen an der Tsukuba University: Lernen Sie sklearn, während Sie das Python-Skript in die Aufgabe aufnehmen (1) Kurs für maschinelles Lernen an der Tsukuba University: Lernen Sie sklearn, während Sie das Python-Skript in die Aufgabe aufnehmen (2) Kurs für maschinelles Lernen an der Tsukuba University: Lernen Sie sklearn, während Sie das Python-Skript in die Aufgabe aufnehmen (3) Kurs für maschinelles Lernen an der Tsukuba University: Lernen Sie sklearn, während Sie das Python-Skript in die Aufgabe aufnehmen (4) Kurs für maschinelles Lernen an der Tsukuba University: Lernen Sie sklearn, während Sie das Python-Skript in die Aufgabe aufnehmen (5) Kurs für maschinelles Lernen an der Tsukuba University: Lernen Sie sklearn, während Sie das Python-Skript in die Aufgabe aufnehmen (6) Kurs für maschinelles Lernen an der Tsukuba University: Lernen Sie sklearn, während Sie das Python-Skript zu einem Teil der Aufgabe machen (7) Erstellen Sie Ihre eigene Methode für den steilsten Abstieg Kurs für maschinelles Lernen an der Tsukuba University: Lernen Sie sklearn, während Sie das Python-Skript zu einem Teil der Aufgabe machen. (8) Erstellen Sie Ihre eigene stochastische Methode für den steilsten Abstieg. Kurs für maschinelles Lernen an der Tsukuba University: Lernen Sie sklearn, während Sie das Python-Skript in die Aufgabe aufnehmen (9) https://github.com/legacyworld/sklearn-basic https://ocw.tsukuba.ac.jp/course/systeminformation/machine_learning/
Recommended Posts