機器學習貝葉斯網(wǎng)絡分類水果

水果部分數(shù)據(jù)


捕獲.PNG

代碼

import numpy as np
import math
import csv
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
import pylab as pl
import random
from matplotlib import cm
from sklearn.model_selection import train_test_split

# 求平均值
def mean(numbers):
    return sum(numbers)/float(len(numbers))

# 求平均差
def stdev(numbers):
  avg = mean(numbers)
  variance = sum([pow(x-avg,2) for x in numbers])/float(len(numbers)-1)
  return math.sqrt(variance)

# 求各列的平均值和方差--提取數(shù)據(jù)特征
def summarize(dataset):
    parameter = [(mean(attribute), stdev(attribute)) for attribute in zip(*dataset)]
    #parameter = [(mean(dataset.iloc[:,i]),stdev(dataset.iloc[:,i])) for i in range(dataset.shape[1]) ]
    del parameter[-1]
    return parameter

# 進行分類
def separatedByClass(dataset):
    separated = {}
    #創(chuàng)建字典
    for i in range(len(dataset)):
        vector = dataset[i]
        if (vector[-1] not in separated):
            #根據(jù)最后一個元素佛掖,隨后一個元素為1,2,3,4菜职,代表著水果的種類巍棱,作為鍵值key
            separated[vector[-1]] = []
        separated[vector[-1]].append(vector)
    return separated

# 類別屬性提取特征,即每一類四種特征總的均值和方差
def summarizeByClass(dataset):
    separated = separatedByClass(dataset)
    summaries = { }
    #創(chuàng)建字典
    for classValue, instances in separated.items():
        summaries[classValue] = summarize(instances)
    return summaries


# 求出高斯概率密度函數(shù)
def calculateProbability(x, mean, stdev):
    exponent = math.exp(-(math.pow(x - mean, 2) / (2 * math.pow(stdev, 2))))
    return (1 / (math.sqrt(2 * math.pi) * stdev)) * exponent

#所屬類的概率
def calculateClassProbabilities(summaries, inputVector):
    probabilities = {}
    #字典
    for classValue, classSummaries in summaries.items():
        probabilities[classValue] = 1
        for i in range(len(classSummaries)):
            mean, stdev = classSummaries[i]
            x = inputVector[i]
            probabilities[classValue] *= calculateProbability(x, mean, stdev)
            #求出總的高斯密度的乘積
    return probabilities

# 對數(shù)據(jù)單一預測
# 每組測試數(shù)據(jù)最有可能的情況
def predict(summaries, inputVector):
    probabilities = calculateClassProbabilities(summaries, inputVector)
    bestLabel, bestProb = None, -1
    for classValue, probability in probabilities.items():
        if bestLabel is None or probability > bestProb:

            bestProb = probability
            bestLabel = classValue
    return bestLabel

#進行多重預測
def getPredictions(summaries, testSet):
    predictions = []        #來存儲結果
    for i in range(len(testSet)):
        result = predict(summaries, testSet[i])
        predictions.append(result)
    return predictions     # 最終返回輸出結果

#輸出結果計算準確率
def getAccuracy(testSet, predictions):
    correct = 0
    print("結果:")
    for x in range(len(testSet)):
        print("預測的結果:", predictions[x], "----", testSet[x][-1], ":正確的結果")
        if testSet[x][-1] == predictions[x]:
            correct += 1
    return (correct / float(len(testSet))) * 100.0

def main():

    fruits = pd.read_table('E:/fruit.txt') #fruit.txt所在位置,我將它放在E盤澄耍。
    feature_names = ['fruit_label', 'mass', 'width', 'height', 'color_score']
    X = fruits[['mass', 'width', 'height', 'color_score', 'fruit_label']]
    Y = fruits['fruit_label']
    X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.25, random_state=0)  #通過pandas取出數(shù)據(jù),再隨機生成X_train和X_test 訓練和測試數(shù)據(jù)
    Traindataset = X_train.values
    Testdataset = X_test.values

    '''
    代碼原因將數(shù)據(jù)轉換成一下格式,目的是為了去掉pandas中dataframe的index绸硕,如mass,width 等特征值
       mass  width  height  color_score  fruit_label
   42   154    7.2     7.2         0.82            3
   48   174    7.3    10.1         0.72            4
   變成
  [[154.     7.2    7.2    0.82   3.  ]
   [174.     7.3   10.1    0.72   4.  ]
   [ 76.     5.8    4.     0.81   2.  ]]   
   '''
    summaries = summarizeByClass(Traindataset)            #根據(jù)測試數(shù)據(jù)進行提取數(shù)據(jù)特征羞芍, 分類哗戈,求方差,均值荷科,然后對每類進行特征值提取
    print("特征的提任ㄒА:",summaries)                      #輸出貝葉斯整理的結果
    predictions = getPredictions(summaries, Testdataset)  #輸入測試數(shù)據(jù)
    accuracy = getAccuracy(Testdataset, predictions)
    print("準確率:",accuracy,'%')

if __name__ == "__main__":
    main()

運行結果


捕獲1.PNG
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市畏浆,隨后出現(xiàn)的幾起案子胆胰,更是在濱河造成了極大的恐慌,老刑警劉巖刻获,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蜀涨,死亡現(xiàn)場離奇詭異,居然都是意外死亡将鸵,警方通過查閱死者的電腦和手機勉盅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來顶掉,“玉大人草娜,你說我怎么就攤上這事⊙魍玻” “怎么了宰闰?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵茬贵,是天一觀的道長。 經(jīng)常有香客問我移袍,道長解藻,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任葡盗,我火速辦了婚禮螟左,結果婚禮上,老公的妹妹穿的比我還像新娘觅够。我一直安慰自己胶背,他們只是感情好,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布喘先。 她就那樣靜靜地躺著钳吟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪窘拯。 梳的紋絲不亂的頭發(fā)上红且,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天,我揣著相機與錄音涤姊,去河邊找鬼暇番。 笑死,一個胖子當著我的面吹牛砂轻,可吹牛的內容都是我干的奔誓。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼搔涝,長吁一口氣:“原來是場噩夢啊……” “哼厨喂!你這毒婦竟也來了?” 一聲冷哼從身側響起庄呈,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蜕煌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后诬留,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體斜纪,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年文兑,在試婚紗的時候發(fā)現(xiàn)自己被綠了盒刚。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡绿贞,死狀恐怖因块,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情籍铁,我是刑警寧澤涡上,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布趾断,位于F島的核電站,受9級特大地震影響吩愧,放射性物質發(fā)生泄漏芋酌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一雁佳、第九天 我趴在偏房一處隱蔽的房頂上張望脐帝。 院中可真熱鬧,春花似錦甘穿、人聲如沸腮恩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至武契,卻和暖如春募判,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背咒唆。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工届垫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人全释。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓装处,卻偏偏與公主長得像,于是被迫代替她去往敵國和親浸船。 傳聞我的和親對象是個殘疾皇子妄迁,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內容

  • 后期整理字體以及排版問題,修訂不適合的翻譯 “A wealth of information. Smart, ye...
    iamzzz閱讀 741評論 0 0
  • 3.1. 介紹 現(xiàn)在李命,您已經(jīng)安裝了Wireshark并有可能熱衷于開始捕捉您的第一個數(shù)據(jù)包登淘。在接下來的章節(jié)中,我們...
    wwyyzz閱讀 1,385評論 0 1
  • ¥開啟¥ 【iAPP實現(xiàn)進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程封字,因...
    小菜c閱讀 6,419評論 0 17
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5黔州? 答:HTML5是最新的HTML標準。 注意:講述HT...
    kismetajun閱讀 27,486評論 1 45
  • 有一個人經(jīng)常喜歡指責別人阔籽。王陽明對他說:“學習應該多反省自己流妻,如果只是看到別人的不對,責怪別人笆制,就不會看到自己的不...
    六爸啦啦啦閱讀 406評論 0 1