1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| """ Created on Tue Nov 15 20:27:27 2016
@author: hugox """ from numpy import * import pandas as pd
df = pd.read_excel('watermelon_3.xlsx') n,d = shape(df)
D = array(df[['色泽', '根蒂', '敲声', '纹理', '脐部', '触感','密度', '含糖率','好瓜']].values[:,:]) test = array(df[['色泽', '根蒂', '敲声', '纹理', '脐部', '触感','密度', '含糖率']].values[0,:]).reshape(1,8)
goodWM = 0 badWM = 0
for i in range(n): if D[i, 8] == 1: goodWM += 1 else: badWM += 1
P_goodWM = (goodWM + 1)/(n + 2) P_badWM = (badWM + 1)/(n + 2)
Ni = amax(D[:, 0:6] , axis = 0).reshape(1,6)
x_goodWM_sep = zeros((1,6)) for i in range(6): for j in range(n): if D[j,d-1] == 1 and test[0,i] == D[j,i]: x_goodWM_sep[0,i] += 1 x_goodWM_sep = (x_goodWM_sep + 1)/(goodWM + Ni)
mean_goodWM = D[0:8,6:8].mean(axis = 0).reshape(1,2) std_goodWM = D[0:8,6:8].std(axis = 0, ddof = 1).reshape(1,2) x_goodWM_con = 1/(sqrt(2*pi)*std_goodWM)*exp(-(test[0,6:8]-mean_goodWM)**2/(2*std_goodWM**2))
x_goodWM = P_goodWM * prod(x_goodWM_sep)* prod(x_goodWM_con)
x_badWM_sep = zeros((1,6))
for i in range(6): for j in range(n): if D[j,d-1] == 0 and test[0,i] == D[j,i]: x_badWM_sep[0,i] += 1 x_badWM_sep = (x_badWM_sep + 1)/(badWM + Ni)
mean_badWM = D[8:,6:8].mean(axis = 0).reshape(1,2) std_badWM = D[8:,6:8].std(axis = 0, ddof = 1).reshape(1,2) x_badWM_con = 1/(sqrt(2*pi)*std_badWM)*exp(-(test[0,6:8]-mean_badWM)**2/(2*std_badWM**2)) x_badWM = P_badWM * prod(x_badWM_sep)* prod(x_badWM_con)
print('好瓜的概率 = %s/n坏瓜的概率 = %s' %(x_goodWM, x_badWM))
|