中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python sklearn KFold如何生成交叉驗證數據集

發布時間:2021-06-24 14:11:03 來源:億速云 閱讀:202 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關Python sklearn KFold如何生成交叉驗證數據集,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

源起:

1.我要做交叉驗證,需要每個訓練集和測試集都保持相同的樣本分布比例,直接用sklearn提供的KFold并不能滿足這個需求。

2.將生成的交叉驗證數據集保存成CSV文件,而不是直接用sklearn訓練分類模型。

3.在編碼過程中有一的誤區需要注意:

這個sklearn官方給出的文檔

>>> import numpy as np
>>> from sklearn.model_selection import KFold
 
>>> X = ["a", "b", "c", "d"]
>>> kf = KFold(n_splits=2)
>>> for train, test in kf.split(X):
...  print("%s %s" % (train, test))
[2 3] [0 1]
[0 1] [2 3]

我之前犯的一個錯誤是將train,test理解成原數據集分割成子數據集之后的子數據集索引。而實際上,它就是原始數據集本身的樣本索引。

源碼:

# -*- coding:utf-8 -*-
# 得到交叉驗證數據集,保存成CSV文件
# 輸入是一個包含正常惡意標簽的完整數據集,在讀數據的時候分開保存到datasetBenign,datasetMalicious
# 分別對兩個數據集進行KFold,最后合并保存
 
from sklearn.model_selection import KFold
import csv
 
def writeInFile(benignKFTrain, benignKFTest, maliciousKFTrain, maliciousKFTest, i, datasetBenign, datasetMalicious):
 newTrainFilePath = "E:\\hadoopExperimentResult\\5KFold\\AllDataSetIIR10\\dataset\\ImbalancedAllTraffic-train-%s.csv" % i
 newTestFilePath = "E:\\hadoopExperimentResult\\5KFold\\AllDataSetIIR10\\dataset\\IImbalancedAllTraffic-test-%s.csv" % i
 newTrainFile = open(newTrainFilePath, "wb")# wb 為防止空行
 newTestFile = open(newTestFilePath, "wb")
 writerTrain = csv.writer(newTrainFile)
 writerTest = csv.writer(newTestFile)
 for index in benignKFTrain:
  writerTrain.writerow(datasetBenign[index])
 for index in benignKFTest:
  writerTest.writerow(datasetBenign[index])
 for index in maliciousKFTrain:
  writerTrain.writerow(datasetMalicious[index])
 for index in maliciousKFTest:
  writerTest.writerow(datasetMalicious[index])
 newTrainFile.close()
 newTestFile.close()
 
 
def getKFoldDataSet(datasetPath):
 # CSV讀取文件
 # 開始從文件中讀取全部的數據集
 datasetFile = file(datasetPath, 'rb')
 datasetBenign = []
 datasetMalicious = []
 readerDataset = csv.reader(datasetFile)
 for line in readerDataset:
  if len(line) > 1:
   curLine = []
   curLine.append(float(line[0]))
   curLine.append(float(line[1]))
   curLine.append(float(line[2]))
   curLine.append(float(line[3]))
   curLine.append(float(line[4]))
   curLine.append(float(line[5]))
   curLine.append(float(line[6]))
   curLine.append(line[7])
   if line[7] == "benign":
    datasetBenign.append(curLine)
   else:
    datasetMalicious.append(curLine)
 
 # 交叉驗證分割數據集
 K = 5
 kf = KFold(n_splits=K)
 benignKFTrain = []; benignKFTest = []
 for train,test in kf.split(datasetBenign):
  benignKFTrain.append(train)
  benignKFTest.append(test)
 maliciousKFTrain=[]; maliciousKFTest=[]
 for train,test in kf.split(datasetMalicious):
  maliciousKFTrain.append(train)
  maliciousKFTest.append(test)
 for i in range(K):
  print "======================== "+ str(i)+ " ========================"
  print benignKFTrain[i], benignKFTest[i]
  print maliciousKFTrain[i],maliciousKFTest[i]
  writeInFile(benignKFTrain[i], benignKFTest[i], maliciousKFTrain[i], maliciousKFTest[i], i, datasetBenign,
     datasetMalicious)
 
 datasetFile.close()
 
 
if __name__ == "__main__":
 
 getKFoldDataSet(r"E:\hadoopExperimentResult\5KFold\AllDataSetIIR10\dataset\ImbalancedAllTraffic-10.csv")

關于“Python sklearn KFold如何生成交叉驗證數據集”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

彩票| 孙吴县| 岳阳县| 沧州市| 灌南县| 沙河市| 洪洞县| 遂宁市| 靖安县| 正定县| 綦江县| 承德市| 巫山县| 武清区| 惠安县| 砚山县| 深州市| 桦甸市| 济南市| 金门县| 河南省| 高密市| 沁水县| 大化| 峨山| 玉溪市| 来宾市| 四会市| 谷城县| 双鸭山市| 凌源市| 高阳县| 琼结县| 内江市| 延津县| 任丘市| 沙湾县| 利川市| 搜索| 余江县| 施秉县|