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.
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.
J'ai analysé les données collectées régulièrement à l'aide de la bibliothèque Python.
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. ** **
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.
(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.
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... (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.
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)
...?
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))
(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 ~~
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)
(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))
(É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
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.
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.
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! !!
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]
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 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).
...
'Éducation': 'Diplômé de l'école supérieure', #Changement de diplômé universitaire
...
#résultat
[207.56731856]
Un parcours académique terrifiant.
...
'la taille': '180', #Remplacé depuis 171
...
#résultat
[164.67592949]
Hauteur terrifiante.
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.