統(tǒng)計學(xué)習(xí)方法 李航 貝葉斯模型 python sklearn 實(shí)現(xiàn) 及課后習(xí)題

  • 李航:
    樸素貝葉斯(naive bayes)法是基于貝葉斯定理與特征條件獨(dú)立假設(shè)的分類方法逆济。
    對于給定的訓(xùn)練數(shù)據(jù)集,首先基于特征條件獨(dú)立假設(shè)學(xué)習(xí)學(xué)習(xí)輸入輸出的聯(lián)合概率分 布;然后基于此模型,對給定的輸入X,利用貝葉斯定理求出后延概率最大的輸入y词爬。
    樸素貝葉斯法實(shí)現(xiàn)簡單,學(xué)習(xí)效率高权均。

python代碼書中4.2例題

import numpy as np

class bayes(object):
    def __init__(self, data, label, num_class, L):
        # data : (list) samples_nums * [features_nums]
        self.data = data
        self.label = label
        self.num_class = num_class
        self.L = L
        self.p_prams = []
        self.p_label = np.zeros(self.num_class)
        self.fea_condition = []
        self.model = self.__model()
    def __model(self):
        self.__get_p_gram()

    def __get_p_gram(self):
        self.__generation_features_conditional()
        start = 0
        for i in range(self.num_class):
            # i 代表第i類
            Ik = list(self.label).count(i)
            self.p_label[i] = (Ik + self.L)/ (len(self.label) + self.num_class * self.L)
            end = Ik + start
            index_sort = np.argsort(self.label)
            condition_k = []#condition_k   是一個列表顿膨,保存第I類每個特征不同取值的概率
            for index, condition in enumerate(self.fea_condition):
                temp = self.data[index_sort[start:end], index].reshape(1, -1)[0]
                condition_kj = []  # 保存第index個特征不同取值的概率
                for c in condition:
                    condition_kj.append((list(temp).count(c) + self.L)/(end - start + len(condition) * self.L))
                condition_k.append(condition_kj)
            start = end
            self.p_prams.append(condition_k)

    def  __generation_features_conditional(self):
        #找出每種特征出現(xiàn)的所有情況
        features_nums = self.data.shape[1]
        for j in range(features_nums):
            # j代表第j個特征
            self.fea_condition.append(np.unique(self.data[:, j]))

    def classify(self, target):
        p = list(self.p_label)
        for index, _ in enumerate(p):
            for fea_index,fea in enumerate(list(target)):
                fea_local = list(self.fea_condition[index]).index(fea)#每個特征值在所屬的S集合中的位置
                p[index] *= self.p_prams[index][fea_index][fea_local]
        c = np.asarray(p).argsort()[-1]
        return p, c


data = np.array([[1, 1], [1, 2], [1, 2], [1, 1], [1, 1], [2, 1], [2, 2], [2, 2],[2, 3], [2, 3], [3, 3], [3, 2], [3, 2], [3, 3], [3, 3]])
label = np.array([0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0])
target = [2, 1]
num_class = 2
L = 1 #拉普拉斯平滑參數(shù)
model = bayes(data, label, num_class, L)
p, c = model.classify(target)
print('Target belong %s, \nP is %s.\n' % (c, p[c]))

sklearn代碼所用數(shù)據(jù)為kaggle中mnist數(shù)據(jù),將特征PCA至六維

# -*- coding: utf-8 -*-

"""
使用sklearn實(shí)現(xiàn)的貝葉斯算法進(jìn)行分類的一個實(shí)例叽赊,
使用數(shù)據(jù)集是Kaggle數(shù)字手寫體數(shù)據(jù)庫
"""



import pandas as pd

import numpy as np

from sklearn.naive_bayes import GaussianNB
from sklearn.decomposition import PCA

import sklearn



# 加載數(shù)據(jù)集

def load_data(filename, n, mode):

    data_pd = pd.read_csv(filename)

    data = np.asarray(data_pd)

    pca = PCA(n_components=n)

    if not mode == 'test':

        dateset = pca.fit_transform(data[:, 1:])

        return dateset, data[:, 0]

    else:

        dateset = pca.fit_transform(data)

        return dateset, 1



def main(train_data_path, test_data_path, n_dim):

    train_data, train_label = load_data(train_data_path, n_dim, 'train')

    print("Train set :" + repr(len(train_data)))

    test_data, _ = load_data(test_data_path, n_dim, 'test')

    print("Test set :" + repr(len(test_data)))

    bys = GaussianNB()

    # 訓(xùn)練數(shù)據(jù)集

    bys.fit(train_data, train_label)

    # 訓(xùn)練準(zhǔn)確率

    score = bys.score(train_data, train_label)

    print(">Training accuracy = " + repr(score))

    predictions = []

    for index in range(len(test_data)):

        # 預(yù)測

        result = bys.predict([test_data[index]])

        predict = bys.predict_proba([test_data[index]])

        predictions.append([index + 1, result[0]])

        print(">Index : %s, predicted = %s" % (index + 1, result[0]))

    columns = ['ImageId', 'Label']

    save_file = pd.DataFrame(columns=columns, data=predictions)

    save_file.to_csv('bys.csv', index=False, encoding="utf-8")



if __name__ == "__main__":

    train_data_path = 'train.csv'

    test_data_path = 'test.csv'

    n_dim = 6

    main(train_data_path, test_data_path, n_dim)

課后習(xí)題

喜歡的關(guān)注點(diǎn)贊哈

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末虽惭,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蛇尚,更是在濱河造成了極大的恐慌,老刑警劉巖顾画,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件取劫,死亡現(xiàn)場離奇詭異匆笤,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)谱邪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進(jìn)店門炮捧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人惦银,你說我怎么就攤上這事咆课。” “怎么了扯俱?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵书蚪,是天一觀的道長。 經(jīng)常有香客問我迅栅,道長殊校,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任读存,我火速辦了婚禮为流,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘让簿。我一直安慰自己敬察,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布尔当。 她就那樣靜靜地躺著莲祸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪居凶。 梳的紋絲不亂的頭發(fā)上虫给,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天,我揣著相機(jī)與錄音侠碧,去河邊找鬼抹估。 笑死,一個胖子當(dāng)著我的面吹牛弄兜,可吹牛的內(nèi)容都是我干的药蜻。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼替饿,長吁一口氣:“原來是場噩夢啊……” “哼语泽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起视卢,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤踱卵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惋砂,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡妒挎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了西饵。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片酝掩。...
    茶點(diǎn)故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖眷柔,靈堂內(nèi)的尸體忽然破棺而出期虾,到底是詐尸還是另有隱情,我是刑警寧澤驯嘱,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布镶苞,位于F島的核電站,受9級特大地震影響宙拉,放射性物質(zhì)發(fā)生泄漏宾尚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一谢澈、第九天 我趴在偏房一處隱蔽的房頂上張望煌贴。 院中可真熱鬧,春花似錦锥忿、人聲如沸牛郑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽淹朋。三九已至,卻和暖如春钉答,著一層夾襖步出監(jiān)牢的瞬間础芍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工数尿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留仑性,地道東北人。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓右蹦,卻偏偏與公主長得像诊杆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子何陆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容