키타미 유의 체형은 얼마나 평균적인가
다만, 계산에 있어서, 프로파일로 수치를 확인할 수 없는 아이돌은 제외했습니다(오누마 구루미, 사토 신, 후타바 안즈, 꿈꾸는).
환경
google colab(python3.6.8)
사용한 파일은 여기 htps : // 기주 b. 이 m/ysk0832/호 by
소개
평균치와 비교해 본다.
신장
체중
B
W
H
평균값
156.23
43.2
80.88
56.31
81.24
키타미 유
156
43
82
57
82
확실히 거의 거의 같습니다.
방법 1: cos 유사도
cos 유사도는 문서 비교 등에 자주 사용되는 지표입니다. 식은 간단하고 내적의 정의를 변형 뿐입니다.
$$\cos\theta=\frac{a\cdot b}{||a||||b||}$$
코드는 다음
import numpy as np
import pandas as pd
# 関数定義
# 内積
def ip(a,b):
return (a*b).sum()
# ノルム
def norm(x):
sum=(x*x).sum()
return np.sqrt(sum)
# 類似度
def sim(a,b):
return ip(a,b)/(norm(a)*norm(b))
# csv読み込み
df=pd.read_csv("cg.csv")
# 確認
print(df)
# 平均
mean=df.mean(numeric_only=True)
# 計算結果をリストに保存
simlist=[]
for i in range(0,186):
result=sim(mean,df.iloc[i,1:6])
print(result)
simlist.append(result)
# 列を追加
df["類似度"]=simlist
# 類似度が高い順に出力
print(df.sort_values("類似度",ascending=False))
결과(상위 10명, 하위 10명)
유는 3위였습니다. 미후네 미유 씨가 2위...?!
방법 2: 정규화
각 열 벡터를 0-1로 정규화하고 cos 유사도를 다시 계산해 보겠습니다.
$$\frac{x-x_{min}}{x_{max}-x_{min}}$$
# 一旦削除
df=df.drop("類似度",axis=1)
# 正規化して再計算
# 名前抜き
df_tmp=df.iloc[:,1:6]
# 正規化
df2=(df_tmp-df_tmp.min())/(df_tmp.max()-df_tmp.min())
mean2=(mean-df_tmp.min())/(df_tmp.max()-df_tmp.min())
# 計算結果をリストに保存
simlist=[]
for i in range(0,186):
result=sim(mean2,df2.iloc[i,:])
print(result)
simlist.append(result)
# 列を追加
df["類似度"]=simlist
# 類似度が高い順に出力
print(df.sort_values("類似度",ascending=False))
결과
유는 7위. 조금 반 정도 쓰고 있네요.
그렇다고해도, 모두 유사도 0.99 넘어서 거의 같지 않을까 생각해 버립니다. 이것은 분명히 이번 데이터가 모두 양수인 것도 원인인 것 같습니다.
htps : // 또는 rt만 0. 하테나 bぉg. 코m/엔트리/2019/05/22/_이s%에9%아1%9에%에4%BC%BC%에5%이면%아6%에3%81%아에%에6% 아 C% 아
또, cos 유사도는 어디까지나 벡터의 개방 상태를 보고 있는 것이며, 가까운 점이기 때문에 유사도가 높다고는 일괄적으로는 말할 수 없습니다. 미유씨가 2위가 된 것도 그 때문이라고 생각됩니다.
그래서 방법 3에.
방법 3: 거리
단순히 평균값에서 유클리드 거리를 계산합니다.
df=df.drop("類似度",axis=1)
# 平均値との距離
dlist=[]
for i in range(0,186):
d=norm(df.iloc[i,1:6]-mean)
dlist.append(d)
# 列を追加
df["距離"]=dlist
# 距離が近い順に出力
print(df.sort_values("距離"))
결과
키타미 유 1위! ! ! ! ! !
요약
이번은 「체형이 가까운」의 해석의 방법에 의해 평가 지표도 바뀌었을까. 유사도는 평균과의 비교라고 하기보다는, 「이 두 사람은 신장은 마치 다르지만 어느 쪽도 마른형이다」같은 것을 알고 싶을 때에 사용하면 좋다고 느끼십니까?
그래서,
키타미 유는 신데렐라 걸즈에서 가장 평균적인 체형의 아이돌이다
Reference
이 문제에 관하여(키타미 유의 체형은 얼마나 평균적인가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ysk0832/items/d47dbff02d687df62efb
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
cos 유사도는 문서 비교 등에 자주 사용되는 지표입니다. 식은 간단하고 내적의 정의를 변형 뿐입니다.
$$\cos\theta=\frac{a\cdot b}{||a||||b||}$$
코드는 다음
import numpy as np
import pandas as pd
# 関数定義
# 内積
def ip(a,b):
return (a*b).sum()
# ノルム
def norm(x):
sum=(x*x).sum()
return np.sqrt(sum)
# 類似度
def sim(a,b):
return ip(a,b)/(norm(a)*norm(b))
# csv読み込み
df=pd.read_csv("cg.csv")
# 確認
print(df)
# 平均
mean=df.mean(numeric_only=True)
# 計算結果をリストに保存
simlist=[]
for i in range(0,186):
result=sim(mean,df.iloc[i,1:6])
print(result)
simlist.append(result)
# 列を追加
df["類似度"]=simlist
# 類似度が高い順に出力
print(df.sort_values("類似度",ascending=False))
결과(상위 10명, 하위 10명)
유는 3위였습니다. 미후네 미유 씨가 2위...?!
방법 2: 정규화
각 열 벡터를 0-1로 정규화하고 cos 유사도를 다시 계산해 보겠습니다.
$$\frac{x-x_{min}}{x_{max}-x_{min}}$$
# 一旦削除
df=df.drop("類似度",axis=1)
# 正規化して再計算
# 名前抜き
df_tmp=df.iloc[:,1:6]
# 正規化
df2=(df_tmp-df_tmp.min())/(df_tmp.max()-df_tmp.min())
mean2=(mean-df_tmp.min())/(df_tmp.max()-df_tmp.min())
# 計算結果をリストに保存
simlist=[]
for i in range(0,186):
result=sim(mean2,df2.iloc[i,:])
print(result)
simlist.append(result)
# 列を追加
df["類似度"]=simlist
# 類似度が高い順に出力
print(df.sort_values("類似度",ascending=False))
결과
유는 7위. 조금 반 정도 쓰고 있네요.
그렇다고해도, 모두 유사도 0.99 넘어서 거의 같지 않을까 생각해 버립니다. 이것은 분명히 이번 데이터가 모두 양수인 것도 원인인 것 같습니다.
htps : // 또는 rt만 0. 하테나 bぉg. 코m/엔트리/2019/05/22/_이s%에9%아1%9에%에4%BC%BC%에5%이면%아6%에3%81%아에%에6% 아 C% 아
또, cos 유사도는 어디까지나 벡터의 개방 상태를 보고 있는 것이며, 가까운 점이기 때문에 유사도가 높다고는 일괄적으로는 말할 수 없습니다. 미유씨가 2위가 된 것도 그 때문이라고 생각됩니다.
그래서 방법 3에.
방법 3: 거리
단순히 평균값에서 유클리드 거리를 계산합니다.
df=df.drop("類似度",axis=1)
# 平均値との距離
dlist=[]
for i in range(0,186):
d=norm(df.iloc[i,1:6]-mean)
dlist.append(d)
# 列を追加
df["距離"]=dlist
# 距離が近い順に出力
print(df.sort_values("距離"))
결과
키타미 유 1위! ! ! ! ! !
요약
이번은 「체형이 가까운」의 해석의 방법에 의해 평가 지표도 바뀌었을까. 유사도는 평균과의 비교라고 하기보다는, 「이 두 사람은 신장은 마치 다르지만 어느 쪽도 마른형이다」같은 것을 알고 싶을 때에 사용하면 좋다고 느끼십니까?
그래서,
키타미 유는 신데렐라 걸즈에서 가장 평균적인 체형의 아이돌이다
Reference
이 문제에 관하여(키타미 유의 체형은 얼마나 평균적인가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ysk0832/items/d47dbff02d687df62efb
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
# 一旦削除
df=df.drop("類似度",axis=1)
# 正規化して再計算
# 名前抜き
df_tmp=df.iloc[:,1:6]
# 正規化
df2=(df_tmp-df_tmp.min())/(df_tmp.max()-df_tmp.min())
mean2=(mean-df_tmp.min())/(df_tmp.max()-df_tmp.min())
# 計算結果をリストに保存
simlist=[]
for i in range(0,186):
result=sim(mean2,df2.iloc[i,:])
print(result)
simlist.append(result)
# 列を追加
df["類似度"]=simlist
# 類似度が高い順に出力
print(df.sort_values("類似度",ascending=False))
단순히 평균값에서 유클리드 거리를 계산합니다.
df=df.drop("類似度",axis=1)
# 平均値との距離
dlist=[]
for i in range(0,186):
d=norm(df.iloc[i,1:6]-mean)
dlist.append(d)
# 列を追加
df["距離"]=dlist
# 距離が近い順に出力
print(df.sort_values("距離"))
결과
키타미 유 1위! ! ! ! ! !
요약
이번은 「체형이 가까운」의 해석의 방법에 의해 평가 지표도 바뀌었을까. 유사도는 평균과의 비교라고 하기보다는, 「이 두 사람은 신장은 마치 다르지만 어느 쪽도 마른형이다」같은 것을 알고 싶을 때에 사용하면 좋다고 느끼십니까?
그래서,
키타미 유는 신데렐라 걸즈에서 가장 평균적인 체형의 아이돌이다
Reference
이 문제에 관하여(키타미 유의 체형은 얼마나 평균적인가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ysk0832/items/d47dbff02d687df62efb
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(키타미 유의 체형은 얼마나 평균적인가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ysk0832/items/d47dbff02d687df62efb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)