機器學習:極大似然估計
阿新 • • 發佈:2019-01-02
一、問題描述
二、演算法核心思想分析
三、程式碼及執行結果
a.py
import xlrd
import numpy as np
# 讀取資料
def read_data(k):
x = []
data = xlrd.open_workbook("lab2_data.xlsx")
table = data.sheets()[0]
rows = table.nrows
for i in range(1, rows):
row_value = table.row_values(i)
if row_value[3 ] == k:
x.append(row_value)
return x
# 計算均值
def get_u(x):
u = np.mean(x)
return u
# 計算方差
def get_sigmal(x):
sigmal = np.cov(x)
return sigmal
def main():
u = [0, 0, 0]
sigmal = [0, 0, 0]
data = read_data(1)
for i in range(3):
xi = [x[i] for x in filter(lambda x: x, data)]
print("x", i + 1, xi)
u[i] = get_u(xi)
print("u", i + 1, u[i])
sigmal[i] = get_sigmal(xi)
print("sigmal", i + 1, sigmal[i])
if __name__ == '__main__':
main()
類ω1中的3個特徵xi的均值和方差分別為:
b.py
import xlrd
import numpy as np
# 讀取資料
def read_data(k):
x = []
data = xlrd.open_workbook("lab2_data.xlsx")
table = data.sheets()[0]
rows = table.nrows
for i in range(1, rows):
row_value = table.row_values(i)
if row_value[3] == k:
x.append(row_value)
return x
# 計算均值
def get_u(x):
u = np.mean(np.mat(x).T, axis=0) # 求每列的均值
return u
# 計算協方差
def get_sigmal(x):
sigmal = np.cov(x)
# sigmal = np.cov(np.mat(x).T)
return sigmal
def main():
u = [0, 0, 0]
sigmal = [0, 0, 0]
data = read_data(1)
for i in range(3):
xi = [x[i] for x in filter(lambda x: x, data)], [x[(i+1) % 3] for x in filter(lambda x: x, data)]
print("x", i + 1, (i+1) % 3 + 1, "\n", np.mat(xi))
u[i] = get_u(xi)
print("u", i + 1, (i+1) % 3 + 1, "\n", np.mat(u[i]))
sigmal[i] = get_sigmal(xi)
print("sigmal", i + 1, (i+1) % 3 + 1, "\n", np.mat(sigmal[i]))
if __name__ == '__main__':
main()
類ω1中任意兩個特徵組合的均值和方差為:
c.py
import xlrd
import numpy as np
# 讀取資料
def read_data(k):
x = []
data = xlrd.open_workbook("lab2_data.xlsx")
table = data.sheets()[0]
rows = table.nrows
for i in range(1, rows):
row_value = table.row_values(i)
if row_value[3] == k:
x.append(row_value)
return x
# 計算均值
def get_u(x):
u = np.mean(x, axis=0)
return u
# 計算協方差
def get_sigmal(x):
sigmal = np.cov(np.mat(x).T)
return sigmal
def main():
data = read_data(1)
xi = [x[:3] for x in filter(lambda x: x, data)]
print("x", "\n", np.mat(xi))
u = get_u(xi)
print("u", "\n", np.mat(u))
sigmal = get_sigmal(xi)
print("sigmal", "\n", np.mat(sigmal))
if __name__ == '__main__':
main()
類ω1中3個特徵組合的均值和方差為:
d.py
import xlrd
import numpy as np
# 讀取資料
def read_data(k):
x = []
data = xlrd.open_workbook("lab2_data.xlsx")
table = data.sheets()[0]
rows = table.nrows
for i in range(1, rows):
row_value = table.row_values(i)
if row_value[3] == k:
x.append(row_value)
return x
# 計算均值
def get_u(x):
u = np.mean(x)
return u
# 計算方差
def get_sigmal(x):
sigmal = np.cov(x)
return sigmal
def main():
u = [0, 0, 0]
sigmal = [0, 0, 0]
data = read_data(2)
for i in range(3):
xi = [x[i] for x in filter(lambda x: x, data)]
print("x", i + 1, "\n", xi)
u[i] = get_u(xi)
print("u", i + 1, "\n", u[i])
sigmal[i] = get_sigmal(xi)
print("sigmal", i + 1, "\n", sigmal[i])
if __name__ == '__main__':
main()
類ω2中均值和協方差矩陣中的三個引數分別為:
如有錯誤請指正