[PYTHON] Application correspondante, j'ai essayé de prendre des statistiques de personnes fortes et j'ai essayé de créer un modèle d'apprentissage automatique

Préface

Bonjour à tous.

Utilisez-vous une application correspondante? !! Je me sens bien avec l'une des personnes qui ont récemment jumelé avec l'application correspondante.

À propos, l'application correspondante que j'utilisais pouvait faire référence aux données d'autres membres populaires. (Les personnes qui en ont reçu 100 ou plus seront probablement affichées.)

J'ai été déçu de le voir.

"Genre, je n'ai pas eu 100 ..." ** "Je veux aussi être un homme de plus de 100 ans" **

J'ai pensé si fortement.

En même temps, comment devenir un «homme de plus de 100 ans»? Dans cet esprit, j'ai analysé les données.

Collecte de données

Nous avons régulièrement saisi manuellement les autres données des membres (en utilisant pleinement la transcription de Google Document) et collecté environ 60 données.

Quant aux données des autres membres affichées, des personnes d'un âge proche de mon âge de 32 ans étaient affichées. Après cela, toutes les données datent de 30 ans.

Une analyse

J'ai analysé les données collectées régulièrement à l'aide de la bibliothèque Python.

Valeur de la fonctionnalité

Pour le montant de la fonction, nous avons utilisé les éléments sélectionnés suivants comme éléments d'entrée.

--Comme numéro --Face (deux valeurs, que la photo montre le visage ou non)

** Je voudrais voir la relation entre la quantité de fonctionnalités et le nombre de likes qui pourraient vous intéresser. ** **

revenu annuel

Soudainement est venu le revenu annuel! C'est un revenu annuel de toute façon! Cusso! (J'étudie la science des données parce que je veux gagner un revenu annuel, s'il vous plaît 10 millions)

Alors dessinons un diagramme de dispersion.


import matplotlib.pyplot as plt
plt.scatter(data['revenu annuel'], data['Nombre de likes'], alpha=0.3)
#les données sont une trame de données.

ダウンロード (71).png (Vertical est le nombre de likes, horizontal est le revenu annuel)

** [Discussion] ** ** Celui qui n'a pas 5 millions n'est pas un homme. Il est impossible d'avoir un revenu mensuel de 140 000 yens. ** ** J'ai l'impression que c'est dit.

Surprenant? La raison en est qu'il n'y a pas beaucoup de corrélation entre le revenu annuel et le nombre de likes. (Plus il est élevé, plus il n'augmente pas)

Quand j'ai mis le coefficient de corrélation ...


pd.DataFrame({"x":data['revenu annuel'], "y":data['Nombre de likes']}).corr()

Revenu annuel x comme coefficient de corrélation


         x        y
x  1.00000 -0.06363
y -0.06363  1.00000

On peut dire qu'il n'y a pratiquement pas de corrélation.

Les gens qui obtiennent beaucoup de pareils sont susceptibles d'avoir autre chose que leur revenu annuel. (* Cependant, il est limité à 5 millions ou plus)

Quelles autres fonctionnalités sont impliquées? Regardons de plus près.

Éducation

Les valeurs de sélection pour la formation universitaire étaient les suivantes. Collégien/École professionnelle/Diplômé de l'Université|Diplôme d'études secondaires|Diplômé de l'université|Diplômé de l'école supérieure|Autre

C'est difficile à gérer en japonais, donc


data['Éducation'] = data['Éducation'].replace({'Collégien/École professionnelle/Diplômé de l'Université':0 ,'Diplôme d'études secondaires':1 ,'Diplômé de l'université':2 ,'Diplômé de l'école supérieure':3 ,'Autre':4})

Le codage des étiquettes a été effectué sous la forme de.

Dessinons un diagramme de dispersion sous cette forme.


plt.scatter(data['Éducation'], data['Nombre de likes'], alpha=0.3)

résultat... ダウンロード (74).png (Je suis désolé de ne pas avoir ajusté l'échelle.)

Diplômé de premier cycle / école professionnelle / collège technique '': 0, Diplômé du secondaire '': 1, Diplômé d'université '': 2, Diplômé de troisième cycle '': 3, `` Autre '': 4 est.

** Après tout, il existe de nombreux collèges et au-dessus. .. .. ** **

Ici, le rapport de corrélation est calculé car ce n'est pas le coefficient de corrélation, mais dans ce cas la relation entre la variable quantitative et la variable qualitative. Étant donné que la formation universitaire ne peut pas être quantifiée (une variable qualitative car nous ne savons pas quelle différence il y a entre les diplômés universitaires et les diplômés diplômés), examinons si les résultats du nombre de likes sont biaisés pour chaque valeur sélectionnée.

Fonction reçue de quelque part



def corr_ratio(x, y):
  variation = ((x - x.mean()) ** 2).sum()
  #print("    variation", variation)
  inter_class = sum([((x[y == i] - x[y == i].mean()) ** 2).sum() for i in np.unique(y)])
  #print("    inter_class", inter_class)
  return (inter_class / variation)

#Calculer le rapport de corrélation
corr_ratio(data.loc[:, ["Nombre de likes"]].values, data.loc[:, ['Éducation']].values)

résultat


# 0.8820459777290447

Il semble y avoir une corrélation.

** [Discussion] ** ** Au moins, vous devriez être hors de l'université ** J'ai l'impression que c'est dit.

la taille

Me pardonneras-tu même si c'est bas? Je demande, alors ne soyez pas comme un revenu annuel. .. ..

Nous allons jeter un coup d'oeil.

#Tracé excluant la ligne NaN
plt.scatter(data.loc[data["la taille"].notnull()]["la taille"], data.loc[data["la taille"].notnull()]['Nombre de likes'], alpha=0.3)

ダウンロード (72).png

...?

Avec cela, il est difficile de comprendre la distribution de la hauteur, alors mettons-la dans un histogramme.

plt.hist(data["la taille"].astype(np.float32))

ダウンロード (73).png (Roulé à 5 cm.)

À propos, la taille moyenne des hommes japonais est d'environ 170 cm ... ** C'est impitoyable **

Prenons ici également le coefficient de corrélation.

pd.DataFrame({"x":data['la taille'].astype(np.float32), "y":data['Nombre de likes']}).corr()

Hauteur x comme coefficient de corrélation


          x         y
x  1.000000  0.073241
y  0.073241  1.000000

Il n'y a pratiquement pas de corrélation ici non plus.

** [Discussion] ** ** Je ne dis pas 180 cm, mais je veux 175 cm ** J'ai l'impression que c'est dit.

Je mesure 171 cm ... ~~ ○ Vraiment ~~

Type de corps

Les options de type de corps sont les suivantes. 'Slim': 0, 'Légèrement mince': 1, 'Normal': 2, 'Muscle': 3, 'Légèrement potelé': 4, 'Potelé': 5

Je vais essayer de tracer après avoir remplacé par ce qui précède

#Tracé excluant la ligne NaN
plt.scatter(data.loc[data["Type de corps"].notnull()]["Type de corps"], data.loc[data["Type de corps"].notnull()]['Comme numéro'], alpha=0.3)

ダウンロード (76).png (Je suis désolé de ne pas avoir ajusté à nouveau l'échelle.)

Eh bien, cela semble être une distribution normale, ou plutôt, il y a la plupart des gens avec une forme corporelle normale et peu d'autres, donc il semble qu'il n'y ait pas de biais.

[PostScript 2019/11/12-] Essayons à nouveau avec l'histogramme.

plt.hist(data_original['Type de corps'].astype(np.float32))

ダウンロード (45).png (Échelle ry)

Le premier est normal et le second est musclé. [- PostScript 2019/11/12]

Ensuite, obtenons le rapport de corrélation.


#Calculer le rapport de corrélation
corr_ratio(data.loc[:, ["Comme numéro"]].values, data.loc[:, ['Type de corps']].values)

résultat

0.9457908220700801

C'est devenu un bon nombre. Honnêtement, la fiabilité est inconnue car il y a peu de données, mais le nombre de personnes est le plus grand ** Normal ou musclé c'est bien. ** **

** [Discussion] ** ** Normal ou musclé ** Visez une forme corporelle normale

Dans les environs ...

Je pense que vous avez pu voir la plupart des choses qui vous intéressaient. Après cela, je vais essayer de créer une machine de prédiction de nombre similaire en utilisant l'apprentissage automatique.

Essayez de faire une machine de prédiction de nombre similaire

Prétraitement

Nous avons fait un certain étiquetage dans la régression, mais pour la plupart des éléments, les nombres ne sont pas proportionnels à leur importance. Par exemple, remplacer «autres» par 4 comme dans la formation académique précédente ne signifie pas qu'il vaut mieux que 3 «diplômés universitaires» de moins de 4.

Donc cette fois, nous avons fait un étiquetage de fréquence. L'étiquetage de fréquence n'est pas abordé ici, mais plus la fréquence est élevée, plus le nombre est élevé. (Je pense que c'est tout à fait raisonnable compte tenu de l'hypothèse selon laquelle les choix que doivent choisir les personnes qui aiment beaucoup.)


def labeling(data):
  for column in data.columns:
    #Évitez les likes car ce sont des variables objectives. La taille et le revenu annuel seront normalisés ultérieurement.
    if not column in ['Likes', 'Heights', 'Salary']:
      #size of each category
      freq_encoding[column] = data.groupby(column).size()
      #get frequency of each category
      freq_encoding[column] = freq_encoding[column]/len(data)
      #print(encoding)
      data[column] = data[column].map(freq_encoding[column])
      freq_encoding[column] = freq_encoding[column].to_dict()
  return freq_encoding, data

# freq_L'encodage est réutilisé lors de l'étiquetage fréquent des données que vous souhaitez prédire à l'avenir.
freq_encoding, data = labeling(data)

La taille et le revenu annuel ont été normalisés.


def normalize(data):
  # #Standardisation
  #Hauteur: dit 171.5(moyenne)/5.8(écart-type)Semble être
  data['Heights'] = ((data['Heights']-171.5)/5.8)
  #Aucun écart type ne peut être obtenu pour le revenu annuel...
  data['Salary'] = ((data['Salary']-data['Salary'].mean())/data['Salary'].std())
  return data

data = normalize(data)

En plus de cela, j'aimerais connaître le coefficient de corrélation entre chaque quantité de caractéristiques et le nombre de likes. Dans ce contexte, le fait qu'il existe une corrélation signifie qu'il existe des options que les hommes forts choisissent tous.

corr.png

Comment c'est? Regardez la colonne "J'aime" (première colonne).

・ Contexte (formation) ・ WantAKids (Voulez-vous des enfants) ・ Socialité ・ Alcool (liqueur) Il y a une certaine corrélation dans. (Plus la valeur est proche de 1, plus elle est corrélée)

En bref, si vous imitez un homme fort par ici, vous pourriez en avoir plus! !!

Sélection de la quantité de fonctionnalités

Le processus est interrompu, mais lorsque j'ai extrait diverses quantités de caractéristiques, la précision était la meilleure pour ne pas inclure les quantités de caractéristiques suivantes.

・ Présence ou absence de visage ・ Type de corps ·revenu annuel

Il ne suffisait pas de supprimer ceux avec un faible rapport de corrélation / coefficient de corrélation, je me demande donc s'il n'y a pas d'autre choix que d'essayer de réduire la quantité de fonctionnalités.

Ou plutôt, il est assez surprenant que la forme du corps et le revenu annuel n'aient rien à voir avec le nombre de likes. (Cependant, n'oubliez pas que ** le revenu annuel est limité à 5 millions ou plus **!)

[2019/11/14 postscript-] 【excuses】 Concernant la présence ou l'absence d'un visage, le fait est que le drapeau est "Le visage est-il visible sur la première feuille?" (J'ai oublié d'enregistrer plusieurs images.) Ce n'est donc pas que le visage n'a pas d'importance. [- PostScript 2019/11/14]

Sélection de modèle

Cette fois, je n'ai pas utilisé le deep learning car j'étudiais le machine learning. Quand j'ai essayé la régression linéaire (normale, Lasso, Ridge), l'arbre de régression déterministe et SVR, SVR était le meilleur.

De plus, bien que l'on dise que la méthode d'exclusion ne devrait pas être tellement appliquée lorsque cet ensemble de données est petit, nous avons pu obtenir une précision d'environ 83%.

Le surajustement est possible, mais il ne peut pas être aidé même si cela prend trop de temps, nous allons donc procéder avec cette précision.

[PostScript 2019/11/12-] À propos, la formation et le test sont d'environ 8: 2. [- PostScript 2019/11/12]

J'ai essayé de prédire mon nombre de likes

J'ai arrêté après moins d'un mois, mais mon nombre de likes était d'environ 80 (Tohoho ...

J'ai essayé de voir si je pouvais prédire correctement mes données.

Mes données sont ci-dessous.


my_df = pd.DataFrame({
  'Comme numéro': 80.0,
  'visage': 'Oui',
  'groupe sanguin': 'Type O',
  'Frères et sœurs': 'Le fils aîné',
  'Éducation': 'Diplômé de l'université',
  'nom de l'école': 'Aucun',
  'Occupation': 'Lié à l'informatique', #2019/11/11 J'ai oublié de l'essayer en tant qu'employé de bureau.
  'revenu annuel': '***',  # revenu annuelは関係ないので秘密
  'la taille': '171',
  'Type de corps': 'd'habitude',
  'Histoire du mariage': 'Célibataire (célibataire)',
  'Volonté de se marier': 'Je veux avoir une bonne personne',
  'Voulez-vous des enfants': 'ne sait pas',
  'Travaux ménagers / garde d'enfants': 'Je veux participer activement',
  'J'espère que nous nous rencontrons': 'Je veux te rencontrer si tu en as envie',
  'Frais de première date': 'Les hommes paient tout',
  'Sociabilité': 'J'aime les petits groupes',
  'Colocataire': 'Vivre seul',
  'vacances': 'samedi et dimanche',
  'Saké': 'boire',
  'le tabac': 'Ne pas fumer',
  'Nom_alpha': 0
}, index=[0])

##Encodage sous étiquette et encodage de fréquence...

#Réduisez le nombre de likes et convertissez en numpy
X = my_df.iloc[:, 1:].values 

#Prédiction! !! !! !!
print(model_svr_rbf1.predict(X))

résultat

[73.22405579]

Ne donnez pas de chiffres au loin !!!! (Je veux dire, l'apprentissage automatique est incroyable)

(11/11/2019: J'ai oublié que j'avais créé le type d'emploi d'un employé de l'entreprise à titre d'essai (résultat: environ 64). Je l'ai corrigé à l'entrée liée à l'informatique à ce moment-là. L'informatique est une meilleure impression! ?)

À propos, après cela, si je mets ma propre valeur et que je m'entraîne, la précision (globale) s'est améliorée (environ 83 → 86%), il y a donc une grande possibilité que ce que j'ai eu soit un nombre raisonnable (larmes).

J'ai changé les données et joué

J'ai essayé de terminer mes études supérieures

...
  'Éducation': 'Diplômé de l'école supérieure', #Changement de diplômé universitaire
...

#résultat
[207.56731856]

Un parcours académique terrifiant.

J'ai essayé de faire 180 cm de haut

...
  'la taille': '180', #Remplacé depuis 171
...

#résultat
[164.67592949]

Hauteur terrifiante.

finalement

La machine de prédiction a été faite avec une précision bâclée d'environ 86%. Cela signifie-t-il que le nombre de likes change en fonction des choix?

Et il n'y avait aucune relation entre le revenu annuel (s'il était de 5 millions ou plus) et la forme du corps (bien que je sois un type de corps normal). En d'autres termes, il y a peut-être un facteur qui n'a pas fait le choix que j'ai choisi.

Sur la base des résultats, il semble que le revenu annuel n'a rien à voir avec cela, donc je ferai de mon mieux pour grandir à l'avenir.

Recommended Posts

Application correspondante, j'ai essayé de prendre des statistiques de personnes fortes et j'ai essayé de créer un modèle d'apprentissage automatique
[Azure] J'ai essayé de créer une machine virtuelle Linux avec Azure de Microsoft Learn
J'ai essayé de créer un modèle avec l'exemple d'Amazon SageMaker Autopilot
[Apprentissage automatique] J'ai essayé de résumer la théorie d'Adaboost
J'ai essayé d'écrire dans un modèle de langage profondément appris
J'ai essayé de comparer la précision des modèles d'apprentissage automatique en utilisant kaggle comme thème.
J'ai essayé de créer une liste de nombres premiers avec python
Je souhaite créer un service d'apprentissage automatique sans programmation! API Web
J'ai essayé de créer un linebot (implémentation)
J'ai essayé de créer un linebot (préparation)
J'ai essayé de prédire le nombre de personnes infectées au niveau national de la nouvelle corona avec un modèle mathématique
J'ai essayé d'appeler l'API de prédiction du modèle d'apprentissage automatique de WordPress
J'ai essayé de visualiser le modèle avec la bibliothèque d'apprentissage automatique low-code "PyCaret"
Je souhaite créer un service d'apprentissage automatique sans programmation!
Je souhaite créer facilement un modèle de bruit
J'ai essayé d'organiser les index d'évaluation utilisés en machine learning (modèle de régression)
Un débutant en apprentissage automatique a essayé de créer un modèle de prédiction de courses de chevaux avec python
J'ai essayé de prédire la présence ou l'absence de neige par apprentissage automatique.
J'ai essayé d'implémenter diverses méthodes d'apprentissage automatique (modèle de prédiction) en utilisant scicit-learn
Un débutant en apprentissage automatique a tenté de créer une IA de jugement Sheltie en un jour
J'ai essayé de comprendre attentivement la fonction d'apprentissage dans le réseau de neurones sans utiliser la bibliothèque d'apprentissage automatique (première moitié)
Créer un ensemble de données d'images à utiliser pour la formation
J'ai essayé de déplacer l'apprentissage automatique (détection d'objet) avec TouchDesigner
J'ai essayé de compresser l'image en utilisant l'apprentissage automatique
[Keras] J'ai essayé de résoudre le problème de classification des zones de type beignet par apprentissage automatique [Étude]
J'ai essayé de faire quelque chose comme un chatbot avec le modèle Seq2Seq de TensorFlow
J'ai essayé de faire une simulation de séparation de source sonore en temps réel avec l'apprentissage automatique Python
J'ai essayé de créer un environnement d'apprentissage amélioré pour Othello avec Open AI gym
[Python] J'ai essayé de créer automatiquement un rapport quotidien de YWT avec la messagerie Outlook
Essayez d'évaluer les performances du modèle d'apprentissage automatique / de régression
J'ai essayé de créer automatiquement un rapport avec la chaîne de Markov
Créez une application d'apprentissage automatique avec ABEJA Platform + LINE Bot
Essayez d'évaluer les performances du modèle d'apprentissage automatique / de classification
J'ai essayé d'héberger un modèle d'apprentissage en profondeur de TensorFlow à l'aide de TensorFlow Serving
J'ai fait une fonction pour vérifier le modèle de DCGAN
J'ai essayé d'utiliser Tensorboard, un outil de visualisation pour l'apprentissage automatique
J'ai essayé l'apprentissage automatique pour convertir des phrases en style XX
J'ai essayé de vérifier la classification yin et yang des membres hololive par apprentissage automatique
J'ai essayé d'implémenter ListNet d'apprentissage de rang avec Chainer
J'ai essayé de créer un bot pour annoncer un événement Wiire
J'ai essayé d'utiliser PI Fu pour générer un modèle 3D d'une personne à partir d'une image
J'ai essayé de comprendre l'apprentissage supervisé de l'apprentissage automatique d'une manière facile à comprendre, même pour les ingénieurs serveurs 1
[API Qiita] [Statistiques • Apprentissage automatique] J'ai essayé de résumer et d'analyser les articles publiés jusqu'à présent.
J'étais frustré par Kaggle, alors j'ai essayé de trouver une bonne propriété locative en grattant et en apprentissage automatique
J'ai essayé de comprendre l'apprentissage supervisé de l'apprentissage automatique d'une manière facile à comprendre, même pour les ingénieurs serveurs 2
J'ai essayé de créer Othello AI avec tensorflow sans comprendre la théorie de l'apprentissage automatique ~ Implémentation ~
J'ai essayé de créer un environnement serveur qui fonctionne sous Windows 10
J'ai essayé de créer un environnement de MkDocs sur Amazon Linux
J'ai essayé d'obtenir une base de données sur les courses de chevaux en utilisant Pandas
J'ai essayé de créer un pointage de crédit simple avec régression logistique.
J'ai essayé de créer une expression régulière de "montant" en utilisant Python
J'ai essayé de créer une expression régulière de "temps" en utilisant Python
J'ai essayé de créer une expression régulière de "date" en utilisant Python
J'ai essayé d'obtenir une liste de noms AMI en utilisant Boto3
J'ai essayé de créer des taureaux et des vaches avec un programme shell