統計機器學習-Multinoulli分佈、多項式分佈

Multinoulli分佈(多元伯努利分佈):

模型:       Mu(p)Mu(p)

        d面🎲獲得每一面的概率: p1,p2,...,pdp_1,p_2,...,p_d

分佈函數:
p(xp)=k=1dpkxkp(x|p)=\prod_{k=1}^d p_k^{x_k}
E(X)=pE(X)=p
似然函數:
L=log(n=1Nk=1dpkxnk)=log(k=1dpkmk)L=log(\prod_{n=1}^N \prod_{k=1}^d p_k^{x_{nk}})=log( \prod_{k=1}^d p_k^{m_k})mk=nxnkm_k=\sum_n x_{nk}
極大似然估計:
L=ln(n=1Nk=1dpkxnk)=ln(k=1dpkmk)=k=1dmklnpk+λ(k=1dpk1)L = ln(\prod^{n=1\to N}\prod^{k=1\to d}p_k^{x_{nk}}) = ln(\prod^{k=1\to d}p_k^{m_k}) = \sum^{k=1\to d}m_k lnp_k+\lambda(\sum^{k=1\to d}p_k-1)
              pk=mkλp_k=\frac{m_k}{\lambda}   λ=N\lambda=-N

其中   λ(k=1dpk1)\lambda(\sum_{k=1}^{d}p_k-1)   的由來
是因爲   k=1dpk=1\sum_{k=1}^d p_k =1   ,
(概率密度函數和爲1),在做極大似然估計時候,必須滿足這一條件。對於帶有約束的優化問題,常用拉格朗日乘子法,  λ>0\lambda>0  表示拉格朗日乘數,表示約束條件的強度。

多項式分佈:

模型:       Mult(n,p)Mult(n,p)
        d面🎲獲得每一面的概率: p1,p2,...,pdp_1,p_2,...,p_d
        擲了n次,每面出現的次數:(x1,x2,...,xd)(x_1,x_2,...,x_d)
        滿足條件:x1+x2+...+xd=nx_1+x_2+...+x_d=n
             xi0x_i≥0
分佈函數:
Cnx1Cnx1x2...Cnx1x2+...xd1xdp1x1...pdxdC_n^{x_1}C_{n-x_1}^{x_2}...C_{n-x_1-x_2+...x_{d-1}}^{x_d}p_1^{x_1}...p_d^{x_d}
f(x)=n!x(1)!...x(d)!(p1)x(1)...(pd)x(d)f(x)=\frac{n!}{x^{(1)}!...x^{(d)}!}(p_1)^{x^{(1)}}...(p_d)^{x^{(d)}}
多項式展開定理:
(p1+...+pd)n=xΔd,nn!x(1)!...x(d)!(p1)x(1)...(pd)x(d)(p_1+...+p_d)^n=\sum_{x∈ \Delta d,n}\frac{n!}{x^{(1)}!...x^{(d)}!}(p_1)^{x^{(1)}}...(p_d)^{x^{(d)}}
矩生成函數:
在這裏插入圖片描述
E(xj)=npjE(x^j)=np_j
Cov[x(j),x(j)]={npj(1pj)                          (j=j)npjpj                                 (jj)Cov[x^{(j)},x^{(j')}]= \begin{cases} np_j(1-p_j) \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (j=j') \\ -np_jp_{j'} \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (j≠j') \end{cases}
在這裏插入圖片描述

一個服從多項式分佈的例子:

在這裏插入圖片描述
將這個基因鹼基序列可視化

Matplotlib:

import xlrd as xl
import numpy as np
from collections import Counter
import matplotlib.pyplot as plt
import pandas as pd

data = xl.open_workbook("等位基因.xlsx")
table = data.sheets()[0]
if data.sheet_loaded(sheet_name_or_index=0):
    cols = table.ncols  # 列數
    lists = [table.col_values(_) for _ in range(cols)]
    list_x = [_ for _ in range(1, len(lists) + 1)]
    list_A = []
    list_G = []
    list_C = []
    list_T = []
    for item in lists:
        dicts = dict(Counter(item))
        list_A.append(dicts.get('A', 0))
        list_G.append(dicts.get('G', 0))
        list_C.append(dicts.get('C', 0))
        list_T.append(dicts.get('T', 0))
    columns = ('A', 'G', 'C', 'T')
    data = []
    data.append(list_A)
    data.append(list_G)
    data.append(list_C)
    data.append(list_T)
    data = np.array(data)
    data = data.T
    df = pd.DataFrame(data, columns=columns, index=[_ for _ in range(1, cols + 1)])
    df.plot(kind='bar', stacked=True,colormap="cool_r",legend="reverse")
    print(df)
    ax=plt.gca()
    ax.spines['right'].set_color('none')
    ax.spines['top'].set_color('none')
    plt.xlabel("Sequence Position")
    plt.ylabel("Bits")
    plt.show()

else:
    print("打開文件失敗")

在這裏插入圖片描述
Pyecharts:

import xlrd as xl
import numpy as np
from pyecharts.charts import *
from collections import Counter
from pyecharts import options as opts
from pyecharts.render import make_snapshot
from snapshot_selenium import snapshot
from pyecharts.globals import ThemeType

data = xl.open_workbook("等位基因.xlsx")
# table=data.sheet_by_name('Sheet1')
# table=data.sheet_by_index(0)
table = data.sheets()[0]
if data.sheet_loaded(sheet_name_or_index=0):
    rows = table.nrows  # 行數
    cols = table.ncols  # 列數
    lists = [table.col_values(_) for _ in range(cols)]
    list_x = [_ for _ in range(1, len(lists) + 1)]
    list_A = []
    list_G = []
    list_C = []
    list_T = []
    for item in lists:
        dicts = dict(Counter(item))
        list_A.append(dicts.get('A', 0))
        list_G.append(dicts.get('G', 0))
        list_C.append(dicts.get('C', 0))
        list_T.append(dicts.get('T', 0))
    bar = (
        Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))
            .add_xaxis(list_x)
            .add_yaxis("A", list_A, stack='stack1')
            .add_yaxis("G", list_G, stack='stack1')
            .add_yaxis("C", list_C, stack='stack1')
            .add_yaxis("T", list_T, stack='stack1')
            .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
            .set_global_opts(title_opts=opts.TitleOpts(pos_left="10%"),
                             yaxis_opts=opts.AxisOpts(name="Bits"),
                             xaxis_opts=opts.AxisOpts(name="Sequence Position")))
    make_snapshot(snapshot, bar.render(), "111.png")
else:
    print("打開文件失敗")

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章