Ces calculs peuvent être facilement obtenus en utilisant des fonctions existantes, mais nous les implémenterons à partir de zéro dans le sens d'en étudier le contenu.
A : 0, 3, 3, 5, 5, 5, 5, 7, 7, 10 B : 0, 1, 2, 3, 5, 5, 7, 8, 9, 10 C : 3, 4, 4, 5, 5, 5, 5, 6, 6, 7
Calculez la différence moyenne et le coefficient de Gini pour les données dans.
Ici, la différence moyenne et le coefficient de Gini sont définis respectivement par les formules suivantes.
\frac{Σ_iΣ_j|x_i-x_j|}{n^2}
\frac{Σ_iΣ_j|x_i-x_j|}{2n^2 \bar{x}}
Par conséquent, j'ai écrit le programme comme suit.
import numpy as np
A = np.array([0,3,3,5,5,5,5,7,7,10])
B = np.array([0,1,2,3,5,5,7,8,9,10])
C = np.array([3,4,4,5,5,5,5,6,6,7])
#Différence moyenne
def ave_diff(x):
n=len(x)**2
result = [np.abs(x[i]-x[j])/n for i in range(len(x)) for j in range(len(x))]
return sum(result)
"""
print(ave_diff(A))
print(ave_diff(B))
print(ave_diff(C))
2.76
3.7599999999999976
1.2000000000000008
"""
#coefficient de Gini
def get_gini(x):
def get_gini(x):
n=len(x)**2
x_bar=x.mean()
result = [np.abs(x[i]-x[j])/(2*n*x_bar) for i in range(len(x)) for j in range(len(x))]
return sum(result)
"""
print(get_gini(A))
print(get_gini(B))
print(get_gini(C))
0.2760000000000002
0.3760000000000002
0.12000000000000008
"""
Lorsque p_i = f_i / n
H(p_1, p_2, ...., p_n) = -Σp_iilog(p_ii)
Défini dans. Cette quantité est appelée entropie, et plus H est grand, plus la distribution est uniforme, et plus H est petit, plus il est concentré.
exemple J'ai demandé à 100 étudiants d'où ils venaient. Les résultats suivants ont été obtenus il y a 10 ans et cette année. Comparez la distribution de ce lieu d'origine du point de vue de la concentration.
zone | A | B | C | D | E | Total |
---|---|---|---|---|---|---|
Cette année | 32 | 19 | 10 | 24 | 15 | 100 |
Il ya 10 ans | 28 | 13 | 18 | 29 | 12 | 100 |
import numpy as np
a=np.array([32, 19, 10, 24, 15])
b=np.array([28,13,18,29,12])
def entropy(x):
H=0
n=sum(x)
H=[x[i]/n*np.log10(x[i]/n) for i in range(len(x))]
# for i in range(len(x)):
# p=a[i]/n
# H.append(p*np.log10(p))
return -sum(H)
"""
print(entropy(a))
print(entropy(b))
0.667724435887455
0.6704368955892825
"""
Calculer le score standard et le score d'écart pour les données B
Score standard / standardisation
z_i = \frac{xi-\bar{x}}{S_x}
Alors
def standard_score(x):
x_bar = x.mean()
s=np.sqrt(x.var())
z = [(x[i]-x_bar)/s for i in range(len(x))]
return z
"""
standard_score(B)
[-1.5214515486254614,
-1.217161238900369,
-0.9128709291752768,
-0.6085806194501845,
0.0,
0.0,
0.6085806194501845,
0.9128709291752768,
1.217161238900369,
1.5214515486254614]
"""
À propos du score de valeur d'écart
T_i = 10z_i * 50
J'ai donc changé un peu la fonction ci-dessus
def dev_val(x):
x_bar = x.mean()
s=np.sqrt(x.var())
T = [(x[i]-x_bar)/s*10 +50 for i in range(len(x))]
return T
'''
def_val(B)
[34.78548451374539,
37.82838761099631,
40.87129070824723,
43.91419380549816,
50.0,
50.0,
56.08580619450184,
59.12870929175277,
62.17161238900369,
65.21451548625461]
'''
Ce sera.
Recommended Posts