python 交叉驗證1

# 2> 十折決策樹算法
from sklearn.tree import DecisionTreeClassifier #導入決策樹模型
from __future__ import division
from sklearn.metrics import confusion_matrix
p = 0.1 #設置訓練集的比例
N = 1/p
correctRate = []
for i in range(int(N)):
    demotest = dt[int(len(dt)*(p*i)):int(len(dt)*(p*(i+1))), :]
    demotrain = np.row_stack((dt[:int(len(dt)*(p*i)), :], dt[int(len(dt)*(p*(i+1))):, :]))#訓練集的取法
    
    tree = DecisionTreeClassifier() # 建立決策樹模型
    tree.fit(demotrain[:,:3], demotrain[:,3]) #訓練模型
    
    predict_CartResult = tree.predict(demotest[:,:3]) # 測試模型
    cm = confusion_matrix(demotest[:,3], predict_CartResult)
    cRate = (cm[1,1] + cm[0,0]) / cm.sum()
    correctRate.append(cRate)
CartPrecision = sum(correctRate)/len(correctRate) # 求這是個正確率的均值 #predict_classes(隨數據集的組合而變化)0.914137931034

CartPrecision

#  3> 十折LM神經網絡
# #構建LM神經網絡模型
from keras.models import Sequential #導入神經網絡初始化函數
from keras.layers.core import Dense, Activation #導入神經網絡層函數、激活函數
from __future__ import division
from sklearn.metrics import confusion_matrix
import time

p = 0.1 #設置訓練集的比例
N = 1/p
correctRateLM = []
start0 = time.clock()
for i in range(int(N)):
    demotest = dt[int(len(dt)*(p*i)):int(len(dt)*(p*(i+1))), :]
    demotrain = np.row_stack((dt[:int(len(dt)*(p*i)), :], dt[int(len(dt)*(p*(i+1))):, :]))#行數據合併
    
    net = Sequential() # 建立神經網絡
    net.add(Dense(input_dim = 3, output_dim = 10)) # 添加輸入層(3節點)到隱藏層(10節點)的連接
    net.add(Activation('relu')) # 隱藏層使用relu激活函數(通過實驗確定的relu函數)
    net.add(Dense(input_dim = 10, output_dim = 1)) # 添加隱藏層(10節點)到輸出層(1節點)的連接
    net.add(Activation('sigmoid')) # 輸出層使用sigmoid激活函數
    net.compile(loss = 'binary_crossentropy', optimizer = 'adam',metrics=None)#編譯模型,用adam方法求解
    net.fit(demotrain[:,:3], demotrain[:,3], nb_epoch=1000, batch_size=1)# 訓練模型,循環1000次
    
    predict_result = net.predict_classes(demotest[:,:3]).reshape(len(demotest)) #預測結果變形,預測結果都是nx1維數組
    cm = confusion_matrix(demotest[:,3],predict_result)
    cRate = (cm[1,1] + cm[0,0]) / cm.sum()
    correctRateLM.append(cRate)
LMPrecision = sum(correctRateLM)/len(correctRateLM) # 求這是個正確率的均值0.
print(LMPrecision)  #0.910459770115
end0 = time.clock()
usetime0 = end0-start0
print("All time is"+ str(usetime0) +'s!')

 

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