https://ocw.tsukuba.ac.jp/course/systeminformation/machine_learning/ Ce cours est très facile à comprendre car il est ouvert au public pour les étudiants de l'Université de Tsukuba. Il y a un problème d'analyse de l'utilisation de Python de temps en temps dans le sujet de ce cours, mais comme la partie programme de ce cours est hors de portée, il n'y a pas d'explication particulière et le programme lui-même n'est pas fourni. Le code source peut être aperçu dans la vidéo, mais ce n'est pas bien car je ne peux pas le déplacer moi-même. J'ai donc décidé de faire un programme qui donnerait le même résultat.
Je connais Python et Pandas, mais qu'est-ce que scicit-learn? Je pars de ce niveau. Cependant, depuis que j'ai utilisé la méthode des moindres carrés quand j'étais au collège, il n'y a aucun problème avec les hypothèses mathématiques (même si j'ai oublié la partie calcul de la matrice).
Il fonctionne sur Docker pour pouvoir être utilisé à tout moment, n'importe où. Puisque matplot ne peut pas être affiché tel quel, il est déposé au format png. Si vous le supprimez de ce github, l'environnement sera prêt. https://github.com/legacyworld/sklearn-basic Le .devcontainer suivant est requis pour le développement à distance avec le code VS.
L'exercice 1.4 est le premier programme. L'explication est d'environ 49 minutes de la 2e (1) régression multiple. Je l'ai expliqué depuis environ 43 minutes, mais le résultat n'est pas correct car la mise à l'échelle n'est pas effectuée dans le programme.
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-Importer des données sur le vin depuis Learn
df= pd.read_csv('winequality-red.csv',sep=';')
#Étant donné que la qualité de la valeur cible est incluse, créez une trame de données supprimée
df1 = df.drop(columns='quality')
y = df['quality'].values.reshape(-1,1)
scaler = preprocessing.StandardScaler)
#Régression simple effectuée pour chaque colonne
for column in df1:
x = df[column]
fig = plt.figure()
plt.xlabel(column)
plt.ylabel('quality')
plt.scatter(x,y)
#Convertir en matrice
X = x.values.reshape(-1,1)
#mise à l'échelle
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)
#Régression multiple
X = df1.values
X_fit = scaler.fit_transform(X)
model = linear_model.LinearRegression()
model.fit(X_fit,y)
print(model.coef_,model.intercept_)
L'endroit où vous serez définitivement bloqué si vous utilisez sklearn est l'endroit où créer une matrice. Vous verrez certainement cette erreur.
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.
Voyons quel est le problème.
X = x.values.reshape(-1,1)
print(f"Avant la conversion{x.values}")
print(f"Après la conversion{X}")
Ensuite, la sortie sera la suivante.
Avant la conversion[ 9.4 9.8 9.8 ... 11. 10.2 11. ]
Après la conversion[[ 9.4]
[ 9.8]
[ 9.8]
...
[11. ]
[10.2]
[11. ]]
Il est devenu un tableau à deux dimensions. Après cela, le calcul est effectivement effectué et le résultat est obtenu. Le graphique est enregistré au format PNG avec le nom de la quantité de fonction (acidité fixe.png etc.)
La dernière partie de régression multiple est ajoutée pour ma propre étude.
Voici le résultat de l'exécution
[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]
La section est la même quelles que soient les données utilisées. Puisqu'il s'agit d'une valeur estimée lorsqu'il n'y a pas de quantité de caractéristiques (= x), il s'agit d'une simple moyenne de «qualité». à partir de ce résultat
C'était une petite tâche d'étudier le vin.
Recommended Posts