[Python] Pensez sérieusement à la méthode gagnante M-1.

1. Contenu

2. Données M-1 de cette année

data = pd.DataFrame([[98,97,96,97,97,99,97],
                     [95,95,94,93,95,95,93],
                     [96,94,92,94,91,94,93],
                     [92,92,93,91,96,96,92],
                     [94,91,93,91,94,92,94],
                     [94,90,93,90,89,90,93],
                     [94,90,94,91,89,89,91],
                     [92,89,91,90,92,91,92],
                     [94,88,92,90,87,89,92],
                     [90,82,88,88,90,91,87]],
                   columns=['kaminuma','matsumoto','reiji','tomizawa','shiraku','hanawa','kyojin'],
                   index=['milkboy','kamaitachi','pekopa','wagyu','mitorizu','karashi','ozuwarudo','suwe','indians','newyork'])

3. Aperçu des données

Écart moyen et standard

data.describe()
kaminuma matsumoto reiji tomizawa shiraku hanawa kyojin
count 10.000000 10.000000 10.0000 10.00000 10.000000 10.000000 10.000000
mean 93.900000 90.800000 92.6000 91.50000 92.000000 92.600000 92.400000
std 2.233582 4.184628 2.1187 2.54951 3.366502 3.306559 2.503331
min 90.000000 82.000000 88.0000 88.00000 87.000000 89.000000 87.000000
25% 92.500000 89.250000 92.0000 90.00000 89.250000 90.250000 92.000000
50% 94.000000 90.500000 93.0000 91.00000 91.500000 91.500000 92.500000
75% 94.750000 93.500000 93.7500 92.50000 94.750000 94.750000 93.000000
max 98.000000 97.000000 96.0000 97.00000 97.000000 99.000000 97.000000

Coefficient de corrélation

sns.heatmap(data.corr(), annot=True)
plt.show()

save.png

data.corr().sum(axis=0)
juge Coefficient de corrélation total
kaminuma 5.251470
matsumoto 5.876156
reiji 5.272178
tomizawa 5.791959
shiraku 4.487326
hanawa 5.002257
kyojin 5.535278

Parcelle de paires

sns.pairplot(data)
plt.show()

save.png

4. Modèle

stratégie

la mise en oeuvre

from sklearn.linear_model import LinearRegression
X = data.values
coefs = np.zeros((7,7))
V = np.zeros(7)
model = LinearRegression()
for i in range(X.shape[1]):
    residuals = np.zeros((6,10))
    coef = np.zeros(6)
    x = X[:,i].reshape(-1,1)
    y = np.delete(X, i, 1)
    for j in range(y.shape[1]):
        y_ = y[:,j].reshape(-1,1)
        model.fit(x, y_)
        coef[j] = model.coef_
        residuals[j,:] = (model.predict(x) - y_).flatten()
    coef = np.insert(coef, i, 1)
    coefs[i,:] = coef
    cov_mat = np.cov(residuals, bias=True)
    V[i] = cov_mat.sum()

Pour ajouter une brève explication,

À * for i in ..., les scores des autres juges sont analysés rétrospectivement en fonction du score d'Uenuma, puis le score de Matsumoto est utilisé comme base de la boucle. À * pour j dans ..., par exemple, basé sur le score d'Uenuma, le score de Matsumoto est retourné et le score de Reiji est retourné. De plus, le coefficient de régression (correspondant à $ \ beta_ {person} $ dans la formule ci-dessus) est stocké dans un tableau appelé coef. De plus, les résidus de la régression sont stockés dans un tableau appelé résidus. À la fin de la boucle * for j in ..., np.insert gère, par exemple, le coefficient de régression d'Uenuma vers Uenuma est de 1. De plus, les coefs sont stockés dans un tableau appelé coefs.

résultat

coefs_df = pd.DataFrame(coefs, 
                        columns=['kaminuma','matsumoto','reiji','tomizawa','shiraku','hanawa','kyojin'],
                        index=['kaminuma','matsumoto','reiji','tomizawa','shiraku','hanawa','kyojin'])
sns.heatmap(coefs_df, annot=True)
plt.title('regression coefficient')
plt.show()

save.png

std_df = pd.DataFrame(pow(V,0.5),
                      columns=['residual std'],
                      index=['kaminuma','matsumoto','reiji','tomizawa','shiraku','hanawa','kyojin'])
residual std
kaminuma 9.332082
matsumoto 4.644780
reiji 9.057326
tomizawa 5.586553
shiraku 10.673552
hanawa 8.872448
kyojin 7.665711

5. Examen

sensitivity_df = pd.DataFrame(data.std(axis=0)*coefs.sum(axis=1), columns=['sensitivity'])
sensitivity_df = pd.concat([sensitivity_df, std_df], axis=1)
sensitivity residual std
kaminuma 14.714779 9.332082
matsumoto 17.009344 4.644780
reiji 14.904319 9.057326
tomizawa 16.691662 5.586553
shiraku 13.664036 10.673552
hanawa 15.027370 8.872448
kyojin 15.747906 7.665711

6. Résumé

Recommended Posts

[Python] Pensez sérieusement à la méthode gagnante M-1.
Pensez grossièrement à la méthode de descente de gradient
Réfléchissez à la programmation de Python sur votre iPad
Trier en Python. Pensons ensuite à l'algorithme.
À propos du module Python venv
À propos de la fonction enumerate (python)
À propos des fonctionnalités de Python
Pensez au problème de changement minimum
À propos de la liste de base des bases de Python
Pensez grossièrement à la fonction de perte
[Python Kivy] À propos de la modification du thème de conception
[Python] Résumez les éléments rudimentaires du multithreading
Le modèle de projet Python auquel je pense.
Mon ami semble faire du python, alors pensez au problème ~ fizzbuzz ~
Pensez à l'environnement d'analyse (Partie 3: Installer pyenv + Anaconda [Python, R] + jupyter + Rstudio)
À propos de la précision de la méthode de calcul du rapport de circonférence d'Archimède
Un programmeur Java a étudié Python. (À propos des décorateurs)
Apprenez le modèle de conception "Méthode de modèle" en Python
J'ai essayé la méthode des moindres carrés en Python
Apprenez le modèle de conception "Méthode d'usine" en Python
Pensez aux recherches de priorité de profondeur et de priorité de largeur en Python
À propos de la différence entre "==" et "is" en python
Écrire une note sur la version python de python virtualenv
Pensez à créer un environnement Python 3 dans un environnement Mac
[Note] À propos du rôle du trait de soulignement "_" en Python
Essayez d'implémenter la méthode Monte Carlo en Python
Pensez aux interfaces sélectives sur la ligne de commande
À propos des tranches Python
À propos de la notation d'inclusion de python
À propos du test
À propos de Python tqdm.
À propos du rendement Python
À propos de python, classe
À propos de l'héritage Python
À propos de python, range ()
À propos de Python Decorator
À propos de la référence Python
À propos des décorateurs Python
[Python] À propos du multi-processus
Méthode Johnson (python)
À propos de la file d'attente
[Python] Méthode Semi-Lagrange
Il est temps de réfléchir sérieusement à la définition et aux compétences des data scientists
Détruire l'expression intermédiaire de la méthode sweep avec Python
Déterminer le seuil à l'aide de la méthode P-tile en python
Pensez à la nouvelle génération de Rack et WSGI
À propos de l'option --enable-shared lors de la construction de Python sous Linux
Un mémorandum sur la mise en œuvre des recommandations en Python
mémo python (pour moi-même): À propos de l'environnement de développement virtualenv
python (2) nécessite self car la méthode est une méthode d'instance