Depuis que j'ai résumé la classification générale de l'apprentissage automatique dans l'article précédent, je décrirai chaque implémentation concrète de cette époque.
Cliquez ici pour l'article précédent https://qiita.com/U__ki/items/4ae54da6cadec8a84d1b
Le thème cette fois est "Quelle est la taille du téléviseur qui correspond à la taille de la pièce?" Peut-être que certaines personnes ont décidé de quitter le printemps. Pour ceux qui se demandent comment déterminer la taille du téléviseur qui correspond à la taille de la nouvelle pièce, j'aimerais trouver la taille du téléviseur qui correspond à la taille de la pièce en utilisant une simple analyse de régression.
J'ai décidé de créer des données simulées à l'aide de pandas, puis de les analyser en fonction de ces données.
Tout d'abord, en vous référant à cet article (* https://www.olive-hitomawashi.com/lifestyle/2019/10/post-294.html*), les données de taille de téléviseur recommandées qui correspondent à la taille de la pièce sont les suivantes. fait. (Si vous avez ceci, vous n'avez pas besoin de cet article)
[Taille du téléviseur] 6ème puissance: 24 pouces 8 tatamis: 32 pouces 10 tatamis: 40 pouces 12 tatamis: 50 pouces
Sortez ces données sous forme de fichier csv à l'aide de pandas.
create_csv.py
#pandas de création csv
import pandas as pd
df=pd.DataFrame([
["6", "24"],
["8", "32"],
["10", "40"],
["12", "50"]],
columns=["room_size", "tv_inch"]
)
df.to_csv("room_tv.csv", index=False)
df est une abréviation pour data flame. De plus, en définissant index = False, le numéro d'index dans csv est éliminé. Cela créera un nouveau fichier appelé room_tv.csv dans le même dossier.
Si les fichiers suivants sont créés dans le dossier, l'opération réussit.
room_tv.csv
room_size,tv_inch
6,24
8,32
10,40
12,50
Vous avez maintenant le fichier csv à utiliser cette fois.
Ensuite, nous effectuerons cette fois la principale analyse de régression simple.
L'analyse de régression simple comprend les trois éléments suivants. ** ・ Modèle de décision ** ** - Réglez la fonction d'évaluation ** ** - Minimiser la fonction d'évaluation (déterminer la pente) **
Commencez par charger csv.
main.py
df=pd.read_csv("room_tv.csv")
Si vous utilisez un notebook jupyter, les données que vous avez créées précédemment seront affichées comme indiqué ci-dessous.
Ensuite, regardons les données cette fois. Matplotlib est facile à comprendre pour illustrer avec python.
main.py
x=df["room_size"]
y=df["tv_inch"]
import matplotlib.pyplot as plt
plt.scatter(x,y)
plt.show()
Ici, x est la taille de la pièce et y est la taille du téléviseur.
J'ai des données qui semblent faciles à gérer. Cette fois, il semble qu'une fonction linéaire puisse le gérer (** détermination du modèle **).
Actuellement, vous pouvez utiliser ces données telles quelles, mais si vous utilisez ces données y=ax+b Ensuite, deux variables, a et b, apparaissent. Le calcul peut être fait tel quel, mais la ** moyenne des données ** est effectuée pour réduire une variable.
** Moyenne des données ** Prenez la valeur moyenne de toutes les données et utilisez la valeur soustraite de chaque donnée. Avec les pandas, il est extrêmement facile de prendre la moyenne des données ou de soustraire toutes les données. En faisant cela, seul y = ax peut être considéré.
main.py
#Obtenez la valeur moyenne des données
xm=x.mean()
ym=y.mean()
#Centralisé en soustrayant la valeur moyenne de toutes les données
xc=x-xm
yc=y-ym
#Réafficher
plt.scatter(xc,yc)
plt.show()
Avec le code ci-dessus, il est devenu la figure suivante.
Il semble qu'il n'y ait pas beaucoup de changement par rapport au graphique précédent, mais comme il n'est pas nécessaire de considérer la section (b), les calculs futurs seront beaucoup plus faciles.
\hat{y}=ax
Vous avez juste besoin de trouver un.
Je veux déterminer la formule afin que la valeur prédite (en utilisant l'apprentissage automatique) soit la plus petite par rapport à la valeur mesurée. La chose pour cela s'appelle la détermination de la fonction d'évaluation. Il a la même signification que «fonction de perte» en science des données. Bien que l'explication soit amoindrie ici, l'erreur quadratique est confirmée et la plus petite est déterminée. Utilisation de y comme valeur mesurée et y ^ (Waihat) comme valeur prédite
\begin{align}
L&=(y_1-\hat{y_1})^2+(y_2-\hat{y_2})^2+....+(y_N-\hat{y_1N})^2\\
&=\sum_{n=1}^{N}(y_n-\hat{y_n})^2
\end{align}
Peut être représenté par. À ce stade, * L * est appelé une fonction d'évaluation.
La fonction d'évaluation apparaît comme une fonction quadratique comme nous l'avons vu précédemment. Par conséquent, le point où l'inclinaison est 0 est le minimum et le point où l'erreur quadratique est petite est obtenu.
Si vous voulez trouver le point où la pente de l'équation quadratique est 0, qui est dans la gamme des mathématiques du secondaire, vous pouvez différencier et trouver le point où "= 0".
Parce que la variable est un
\frac{\partial}{\partial a}(L)=0
Demander. En remplaçant la formule ci-dessus et en l'élargissant
\begin{align}
L&=\sum_{n=1}^{N}y_n^2-2(\sum_{n=1}^{N}x_ny_n)a+(\sum_{n=1}^{N}x_n^2)a^2\\
&=c_o-2c_1a+c_2a^2
\end{align}
Remplacer
\frac{\partial}{\partial a}(c_o-2c_1a+c_2a^2)=0\\
\\
a=\frac{\sum_{n=1}^{N}x_ny_n}{\sum_{n=1}^{N}x_n^2}
Écrivons du code à ce sujet.
main.py
#Trouvez la valeur de chaque carré à partir de la formule
xx=xc*xc
xy=xc*yc
#Demandez un
a=xy.sum()/xx.sum()
#Essayez de tracer
plt.scatter(xc,yc, label="y")
plt.plot(x,a*x, label="y_hat", color="green")
plt.legend()
plt.show()
Le graphique est présenté ci-dessous.
Puisque x est déterminé dans la plage de la valeur mesurée, le segment de ligne est court, mais a a été obtenu.
D'après ce qui précède, l'inclinaison a a été obtenue. Cependant, comme il est centralisé, lors de son application
N'oubliez pas de multiplier x (valeur x) -x (valeur moyenne) par a et enfin y (valeur moyenne).
Enfin, j'en rédigerai un résumé.
main.py
import pandas as pd
import matplotlib.pyplot as plt
df=pd.read_csv("room_tv.csv")
x=df["room_size"]
y=df["tv_inch"]
#Moyenne
xm=x.mean()
ym=y.mean()
#Centralisation
xc=x-xm
yc=y-ym
xx=xc*xc
xy=xc*yc
a=xy.sum()/xx.sum()
plt.scatter(xc,yc, label="y")
plt.plot(x,a*x, label="y_hat", color="green")
plt.legend()
plt.show()
prime
main.py
#Aperçu des données
df.describe()
Cela analysera les données comme suit. Utile pour traiter des quantités de données plus complexes et plus importantes.
Le code était court mais très significatif. La prochaine fois, j'aimerais faire une analyse de régression multiple. En tant que développements futurs, je publierai non seulement des éléments liés à la programmation tels que le codage et la gestion des erreurs, mais également ceux liés aux neurosciences.
Recommended Posts