https://ocw.tsukuba.ac.jp/course/systeminformation/machine_learning/ Dieser Kurs ist sehr leicht zu verstehen, da er für Studenten der Tsukuba-Universität öffentlich zugänglich ist. Es gibt ein Problem bei der Analyse mit Python von Zeit zu Zeit im Thema dieses Kurses, aber da der Programmteil dieses Kurses außerhalb des Geltungsbereichs liegt, gibt es keine besondere Erklärung und das Programm selbst wird nicht bereitgestellt. Der Quellcode kann im Video gesehen werden, ist aber nicht ordentlich, weil ich ihn nicht selbst verschieben kann. Also habe ich beschlossen, ein Programm zu erstellen, das das gleiche Ergebnis liefert.
Ich kenne Python und Pandas, aber was ist Scicit-Learn? Ich fange von diesem Level an. Da ich jedoch während meines Studiums die Methode der kleinsten Quadrate verwendet habe, gibt es kein Problem mit mathematischen Annahmen (obwohl ich den Berechnungsteil der Matrix vergessen habe).
Es läuft auf Docker, so dass es jederzeit und überall verwendet werden kann. Da das Matplot nicht so angezeigt werden kann, wie es ist, wird es auf png abgelegt. Wenn Sie es von diesem Github ablegen, ist die Umgebung bereit. https://github.com/legacyworld/sklearn-basic Der folgende .devcontainer ist für die Remoteentwicklung mit VS-Code erforderlich.
Übung 1.4 ist das erste Programm. Die Erklärung stammt aus etwa 49 Minuten der 2. (1) multiplen Regression. Ich erklärte aus ca. 43 Minuten, aber das Ergebnis ist nicht korrekt, da die Skalierung im Programm nicht erfolgt.
python:Homework_1.4.py
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn import linear_model
from sklearn.metrics import mean_squared_error
from sklearn import preprocessing
#scikit-Importieren Sie Weindaten von learn
df= pd.read_csv('winequality-red.csv',sep=';')
#Da die Zielwertqualität enthalten ist, erstellen Sie einen abgelegten Datenrahmen
df1 = df.drop(columns='quality')
y = df['quality'].values.reshape(-1,1)
scaler = preprocessing.StandardScaler)
#Für jede Spalte wird eine einfache Regression durchgeführt
for column in df1:
x = df[column]
fig = plt.figure()
plt.xlabel(column)
plt.ylabel('quality')
plt.scatter(x,y)
#In Matrix konvertieren
X = x.values.reshape(-1,1)
#Skalierung
X_fit = scaler.fit_transform(X)
model = linear_model.LinearRegression()
model.fit(X_fit,y)
plt.plot(x,model.predict(X_fit))
mse = mean_squared_error(model.predict(X_fit),y)
print(f"quality = {model.coef_[0][0]} * {column} + {model.intercept_[0]}")
print(f"MSE: {mse}")
filename = f"{column}.png "
fig.savefig(filename)
#Multiple Regression
X = df1.values
X_fit = scaler.fit_transform(X)
model = linear_model.LinearRegression()
model.fit(X_fit,y)
print(model.coef_,model.intercept_)
Der Ort, an dem Sie definitiv stecken bleiben, wenn Sie sklearn verwenden, ist der Ort, an dem Sie eine Matrix erstellen. Sie werden diesen Fehler auf jeden Fall sehen.
ValueError: Expected 2D array, got 1D array instead:
array=[7.4 7.8 7.8 ... 6.3 5.9 6. ].
Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.
Mal sehen, was das Problem ist.
X = x.values.reshape(-1,1)
print(f"Vor der Konvertierung{x.values}")
print(f"Nach der Konvertierung{X}")
Dann wird die Ausgabe wie folgt sein.
Vor der Konvertierung[ 9.4 9.8 9.8 ... 11. 10.2 11. ]
Nach der Konvertierung[[ 9.4]
[ 9.8]
[ 9.8]
...
[11. ]
[10.2]
[11. ]]
Es wurde in ein zweidimensionales Array geändert. Danach wird die Berechnung tatsächlich durchgeführt und das Ergebnis erhalten. Das Diagramm wird als PNG mit dem Namen der Merkmalsmenge (fester Säuregehalt.png usw.) gespeichert.
Der letzte Teil der multiplen Regression wird für meine eigene Studie hinzugefügt.
Das Folgende ist das Ausführungsergebnis
[root@316e28b88f45 workspace]# python test.py
quality = 0.10014898994431619 * fixed acidity + 5.6360225140712945
MSE: 0.6417307196439609
quality = -0.3153038874367112 * volatile acidity + 5.6360225140712945
MSE: 0.5523439983981253
quality = 0.18275435128971876 * citric acid + 5.6360225140712945
MSE: 0.6183613869155018
quality = 0.0110857825729839 * residual sugar + 5.6360225140712945
MSE: 0.6516376452555722
quality = -0.10406844138289646 * chlorides + 5.6360225140712945
MSE: 0.6409302993389623
quality = -0.04089548993375638 * free sulfur dioxide + 5.6360225140712945
MSE: 0.6500880987339057
quality = -0.14943458718129748 * total sulfur dioxide + 5.6360225140712945
MSE: 0.6294298439847829
quality = -0.14121524469500035 * density + 5.636022514071298
MSE: 0.6318187944965589
quality = -0.046607526450713255 * pH + 5.6360225140712945
MSE: 0.6495882783089737
quality = 0.20295710475205553 * sulphates + 5.6360225140712945
MSE: 0.6105689534614908
quality = 0.3844171096080022 * alcohol + 5.6360225140712945
MSE: 0.503984025671457
[[ 0.04349735 -0.19396667 -0.03555254 0.02301871 -0.08818339 0.04560596
-0.10735582 -0.03373717 -0.06384247 0.1552765 0.29424288]] [5.63602251]
Der Abschnitt ist derselbe, unabhängig davon, welche Daten verwendet werden. Da es sich um einen geschätzten Wert handelt, wenn keine Merkmalsmenge (= x) vorhanden ist, handelt es sich um einen einfachen Durchschnitt der "Qualität". aus diesem Ergebnis
Es war eine kleine Aufgabe, Wein zu studieren.
Recommended Posts