第五次任務計劃書

1、計劃進度html

 
計劃安排時間 計劃完成內容 是否完成
 2017.4.2---2017.4.8 嘗試進行代碼實現,並進行小規模數據集做爲輸入,進行測試  
 2017.4.9---2017.4.15 完善具體代碼,並着手進行畢業論文撰寫  
 2017.4.16---2017.4.22 進行Python更加深刻學習,利用一些擴展包,嘗試對數據結果進行展現  
 2017.4.23---2017.4.29 撰寫畢業論文,而且與老師共同修改   
 2017.4.30---2017.5.6 繼續完善畢業設計,與老師溝通  
 2017.5.7---2017.5.12 畢業論文定稿,準備畢業答辯  

2、本週研究內容。python

一、簡單實現樸素貝葉斯分類算法(python),主要包括如下步驟:算法

  (1)、導入數據函數和劃分數組

import  csv 
def loadfile(filename):     with (open(filename,'r')) as f: #用with語句比較方便         reader = csv.reader(f)      #csv的reader函數讀取         dataset =  list(reader)     #將reader所有存儲在dataset中,將其轉爲列表         for i in range(len(dataset)):             dataset[i] = [float(x) for x in dataset[i]]  #生成式將數字變爲浮點數         return dataset
import random  #導入隨機數模塊 
def splitDataset(dataset,splitRatio):   #拆分數據集 
    trainszie = int (len(dataset)*splitRatio)  #測試集的長度等於總體數據長度乘拆分比率 
    trainset = []   #初始化測試集 
    copy = list (dataset)  #做爲抽離的數據集 
    while len(trainset) < trainszie:  #當訓練集的長度小於要求的拆分長度 
        index = random.randrange(len(copy)) #在整個數組中隨機取出一個下標 
        trainset.append(copy.pop(index)) #這個下表從整個列表取出,放入訓練集 
    return [trainset,copy] #返回訓練集合測試集

(2)、提取數據特徵app

  1)按類別劃分數據dom

 

def separateByAttackClass (dataset): 
    separated ={} 
    for i in range(len(dataset)):  #循環dataset列表 
        vector = dataset[i]          #取出dataset的值 
        if(vector[-1] not in separated):  #下標記爲-1表示末位元素,即類型的值,若一開始separate字典沒有該特徵, 
            separated[vector[-1]]=[]       # 則置爲空 
        separated[vector[-1]].append(vector) #特徵值爲鍵值,相同鍵值的則歸爲同一鍵 
    return separated

  2)計算均值,計算標準差函數

import math 
def mean(numbers): 
    return sum(numbers)/float(len(numbers))  #sum函數的參數是個List 
def stdev(numbers): 
    avg = mean(numbers) 
    variance = sum([pow(x-avg,2) for x in numbers])/float(len(numbers)-1) #方差公式爲,每個數與均值的離差的平方和除以 
                                                                 # 樣本個數(由於此處爲樣本因此方差應除以N-1,保證對總體的估計) 
    return math.sqrt(variance)   #math.sqrt函數求開方

      3)提取數據集特徵post

  
提取數據集特徵,計算每一個屬性的均值和標準差 
#重點是ZIP函數的靈活應用! 
def summarize(dataset): 
    summaries = [(mean(attribute),stdev(attribute)) for attribute in zip(*dataset) ] #使用生產式,zip函數按列劃分 
    del summaries[-1] #刪除最後的特徵值 
    return summaries

      4)按類別提取屬性特徵學習

#合併函數,先分類後計算在各個類別下的屬性
def summarizeByClass(dataset):
    separated = separateByAttackClass(dataset)  #按攻擊類型分類
    summaries={}        #初始化一個字典
    for classValue, instances in separated.iteritems(): # 迭代器生成 鍵:值
        summaries[classValue] = summarize(instances)   #將值(列表)進行計算方差和均值,
    return summaries測試

(3)預測

  1)計算高斯機率密度函數

#肯定完各個屬性在各個類別下的均值和方差以後。就能夠進行高斯分佈的計算

import math
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 #正態分佈指數前的部分

  2)計算對應類的機率

#計算所屬於類的機率
def calculateClassProbabilities(summaries,inputVector):
    proabilities = {}  #初始化一個類
    for classValue , classSummaries in summaries.iteritems(): #迭代器
        proabilities[classValue] = 1  #先置爲1
        for i in range(len(classSummaries)): 
            mean,stdev = classSummaries[i]   #得到平均數,方差
            x = inputVector[i]  
            proabilities[classValue] *= calculateProbability(x,mean,stdev)  #累乘計算
    return proabilities

  3)單一預測

def predic(summaries,inputVector):
    probailities = calculateClassProbabilities(summaries,inputVector)  #調用上一個屬於某屬性的類的機率
    bestlabel,bestProb = None,-1  #標籤類型取值爲None,最大機率先設爲-1
    for classValue , proability in probailities.iteritems(): #迭代器得到類和機率對
        if bestlabel is None or proability > bestProb:  #判斷若是一開始類型爲空,以及以後尋找最大機率
            bestProb =  proability  #則使得最大機率賦值
            bestlabel = classValue  #並返回該類的類型
    return bestlabel

  4)進行多值預測

#多個輸入的分類預測
def getPrediction(summaries, testSet):
    predictions = []  #初始化列表
    for i in range(len(testSet)):
        result = predic(summaries,testSet[i]) #列表屢次調用預測
        predictions.append(result)   #將預測值插入列表
    return predictions

3、你本週的體會及須要改進地方。

  測試截圖較多不方便放上去,每一個函數都實現了相應的結果,如今只要拼湊起來,並對最後的結果進行即返回來的全部預測值的列表進行操做,不過在編寫代碼過程當中,遺漏了先驗機率的計算,以後會把這個添加進去!以後就是數據預處理,打算用python的庫進行歸一化處理以後,拿出若干屬性預測,以及最後的圖表展現,也是用Python實現

4、你本週參考的文獻。

一、http://www.cnblogs.com/chaosimple/p/4153167.html

二、http://python.jobbole.com/81019/

相關文章
相關標籤/搜索