国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【人工智能概論】 K折交叉驗證

這篇具有很好參考價值的文章主要介紹了【人工智能概論】 K折交叉驗證。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

【人工智能概論】 K折交叉驗證


一. 簡單驗證及其缺點

1.1 簡單驗證簡介

  • 簡單驗證: 將原始數(shù)據(jù)集隨機劃分成訓練集和驗證集兩部分,例,將數(shù)據(jù)按照7:3的比例分成兩部分,70%的樣本用于訓練模型;30%的樣本用于模型驗證,如下圖。

k折交叉驗證,【人工智能概論】,人工智能,深度學習,機器學習

1.2 簡單驗證的缺點

  • 數(shù)據(jù)都只被用了一次;
  • 驗證集上計算出來的評估指標與原始分組有很大關系;
  • 對于時序序列,要保存時序信息,往往不能打亂數(shù)據(jù)的順序對數(shù)據(jù)進行隨機截取,這就帶來了問題,比如總用春、夏、秋的數(shù)據(jù)做訓練,用冬的數(shù)據(jù)做測試,這顯然是有問題的,是不能容忍的。

二. K折交叉驗證

  • 為了解決簡單交叉驗證的不足,引出K折交叉驗證,其既可以解決數(shù)據(jù)集的數(shù)據(jù)量不夠大的問題,也可以解決參數(shù)調優(yōu)的問題。。

2.1 K折交叉驗證的思路

  1. 首先,將全部樣本劃分成k個大小相等的樣本子集;
  2. 依次遍歷這k個子集,每次把當前子集作為驗證集,其余所有樣本作為訓練集,進行模型的訓練和評估;
  3. 最后把k次評估指標的平均值作為最終的評估指標。在實際實驗中,k通常取10,如下圖。

k折交叉驗證,【人工智能概論】,人工智能,深度學習,機器學習文章來源地址http://www.zghlxwxcb.cn/news/detail-720070.html

2.2 小細節(jié)

  • K折交叉驗證中有這樣一個細節(jié),下一折的訓練不是在上一折的基礎上進行的,即每訓練新的一折都要重新初始化模型參數(shù)。
  • K折交叉驗證只能做驗證使用,因此不能根據(jù)它的結果做為模型參數(shù)的保存判斷依據(jù),但可以基于它做超參組合的確定與模型結構的調整,然后再重新初始化模型,進行訓練得到較好的模型參數(shù)。
  • 對于有時序信息的數(shù)據(jù),要看看不同折之間性能表現(xiàn)會不會有明顯差距。

2.3 K折交叉驗證的缺點

  • 因為K折交叉驗證執(zhí)行一次訓練的總輪數(shù)是每一折的訓練輪數(shù)(epochs)與總折數(shù)(K)的乘積,因此訓練的成本會翻倍。

2.4 K折交叉驗證的代碼

import torch
import random
from torch.utils.data import DataLoader, TensorDataset
from Model.ReconsModel.Recoder import ReconsModel, Loss_function
from Model.ModelConfig import ModelConfig

# 返回第 i+1 折(i取 0 ~ k-1)的訓練集(train)與驗證集(valid)
def get_Kfold_data(k, i, x):  # k是折數(shù),取第i+1折,x是特征數(shù)據(jù)
    fold_size = x.size(0) // k  # 計算每一折中的數(shù)據(jù)數(shù)量
    val_start = i * fold_size  # 第 i+1折 數(shù)據(jù)的測試集初始數(shù)據(jù)編號
    if i != k - 1:  # 不是最后一折的話,數(shù)據(jù)的分配策略
        val_end = (i + 1) * fold_size  # 驗證集的結束
        valid_data = x[val_start: val_end]
        train_data = torch.cat((x[0: val_start], x[val_end:]), dim=0)
    else:  # 如果是最后一折,數(shù)據(jù)的分配策略,主要涉及到不能K整除時,多出的數(shù)據(jù)如何處理
        valid_data = x[val_start:]  # 實際上,多出來的樣本,都放在最后一折里了
        train_data = x[0: val_start]

    return train_data, valid_data


# k折交叉驗證,某一折的訓練
def train(model, train_data, valid_data, batch_size, lr,epochs):
    # 數(shù)據(jù)準備
    train_loader = DataLoader(TensorDataset(train_data), batch_size, shuffle=True)
    valid_loader = DataLoader(TensorDataset(valid_data), batch_size, shuffle=True)

    # 損失函數(shù),優(yōu)化函數(shù)的準備
    criterion = Loss_function()
    optimizer = torch.optim.Adam(params=model.parameters(), lr=lr)

    # 記錄每一個epoch的平均損失
    train_loss = []
    valid_loss = []


    for epoch in range(epochs):
        tra_loss = 0
        val_loss = 0
        for i , data in enumerate(train_loader):

            # 假設數(shù)據(jù)的處理 此時的data是list類型的數(shù)據(jù),轉化成Tensor,并且把多出來的第0維去掉
            data = torch.stack(data)
            data = data.squeeze(0)


            optimizer.zero_grad()  # 梯度清零
            recon, mu, log_std = model(data, if_train=True)  # if_train不能少

            # 計算損失
            loss = criterion.loss_function(recon, data, mu, log_std)

            # 反向傳播
            loss.backward()
            optimizer.step()

            tra_loss = tra_loss + loss.item()
        tra_loss = tra_loss / len(train_data)
        train_loss.append(tra_loss)

        # 計算測試集損失
        with torch.no_grad():
            for i, data in enumerate(valid_loader):

                # 假設數(shù)據(jù)的處理 此時的data是list類型的數(shù)據(jù),轉化成Tensor,并且把多出來的第0維去掉
                data = torch.stack(data)
                data = data.squeeze(0)

                optimizer.zero_grad()

                recon, mu, log_std = model(data, if_train=False)

                test_loss = criterion.loss_function(recon, data, mu, log_std).item()

                val_loss = val_loss + test_loss
            val_loss = val_loss / len(valid_data)
            valid_loss.append(val_loss)

        print('第 %d 輪, 訓練的平均誤差為%.3f, 測試的平均誤差為%.3f 。'%(epoch+1, tra_loss, val_loss))
    return train_loss, valid_loss

# k折交叉驗證
def k_test(config, datas): # k是總折數(shù),
    valid_loss_sum = 0

    for i in range(config.k):

        model = ReconsModel(config) # 細節(jié),每一折,并不是在上一折訓練好的模型基礎上繼續(xù)訓練,而是重新訓練

        print('-'*25,'第',i+1,'折','-'*25)

        train_data , valid_data = get_Kfold_data(config.k, i, datas) # 獲取某一折的訓練數(shù)據(jù)、測試數(shù)據(jù)

        train_loss, valid_loss = train(model, train_data, valid_data, config.batch_size, config.lr, config.epochs)

        # 求某一折的平均損失
        train_loss_ave = sum(train_loss)/len(train_loss)
        valid_loss_ave = sum(valid_loss)/len(valid_loss)
        print('-*-*-*- 第 %d 折, 平均訓練損失%.3f,平均檢驗損失%.3f -*-*-*-'%(i+1, train_loss_ave,valid_loss_ave))
        valid_loss_sum = valid_loss_sum + valid_loss_ave

    valid_loss_k_ave = valid_loss_sum / config.k  # 基于K折交叉驗證的驗證損失
    print('*' * 60, )
    print('基于K折交叉驗證的驗證損失為%.4f'%valid_loss_k_ave)




if __name__ == "__main__":
    # 創(chuàng)建數(shù)據(jù)集,或者說數(shù)據(jù)集只要是這樣的形式即可
    X = torch.rand(5000, 16, 38)  # 5000條數(shù)據(jù),,每條有16個時間步,每步38個特征,時序數(shù)據(jù)

    # 隨機打亂
    index = [i for i in range(len(X))]
    random.shuffle(index)
    X = X[index]  # 要是有標簽的話,index要對得上

    config = ModelConfig()
    config.load('./Model/config.json')

    k_test(config, X)

到了這里,關于【人工智能概論】 K折交叉驗證的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 人工智能深度學習

    人工智能深度學習

    目錄 人工智能 深度學習 機器學習 神經(jīng)網(wǎng)絡 機器學習的范圍 模式識別 數(shù)據(jù)挖掘 統(tǒng)計學習 計算機視覺 語音識別 自然語言處理 機器學習的方法 回歸算法 神經(jīng)網(wǎng)絡 SVM(支持向量機) 聚類算法 降維算法 推薦算法 其他 機器學習的分類 機器學習模型的評估 機器學習的應用 機

    2024年02月22日
    瀏覽(26)
  • 人工智能之深度學習

    第一章 人工智能概述 1.1人工智能的概念和歷史 1.2人工智能的發(fā)展趨勢和挑戰(zhàn) 1.3人工智能的倫理和社會問題 第二章 數(shù)學基礎 1.1線性代數(shù) 1.2概率與統(tǒng)計 1.3微積分 第三章 監(jiān)督學習 1.1無監(jiān)督學習 1.2半監(jiān)督學習 1.3增強學習 第四章 深度學習 1.1神經(jīng)網(wǎng)絡的基本原理 1.2深度學習的

    2024年02月09日
    瀏覽(28)
  • 【人工智能概論】 XGBoost應用——特征篩選

    【人工智能概論】 XGBoost應用——特征篩選

    換一個評價指標,特征排序結果就會不一樣,甚至同樣的數(shù)據(jù)同樣的方法多次執(zhí)行得到的結果也不是完全一樣,特征篩選這件事見仁見智,要理性看待,但確實可以提供一種交叉驗證的角度。 使用梯度提升算法的好處是在提升樹被創(chuàng)建后,可以相對直接地得到每個特征的重要

    2024年01月23日
    瀏覽(27)
  • 人工智能、機器學習、深度學習的區(qū)別

    人工智能、機器學習、深度學習的區(qū)別

    人工智能涵蓋范圍最廣,它包含了機器學習;而機器學習是人工智能的重要研究內容,它又包含了深度學習。 人工智能是一門以計算機科學為基礎,融合了數(shù)學、神經(jīng)學、心理學、控制學等多個科目的交叉學科。 人工智能是一門致力于使計算機能夠模擬、模仿人類智能的學

    2024年02月08日
    瀏覽(32)
  • 人工智能的深度學習如何入門

    人工智能深度學習近年來成為熱門的技術領域,被廣泛應用于許多領域,如自然語言處理、圖像識別、機器翻譯等。學習人工智能深度學習需要具備一定的數(shù)學和編程基礎,但對于初學者來說,并不需要過于復雜的數(shù)學和編程知識。本文將介紹人工智能深度學習的基本概念和

    2024年03月27日
    瀏覽(30)
  • 深度學習:探索人工智能的前沿

    深度學習:探索人工智能的前沿

    人工智能(Artificial?Intelligence,簡稱AI)是一門研究如何使計算機能夠執(zhí)行通常需要人類智能的任務的領域。從早期的符號推理到現(xiàn)代的深度學習,人工智能經(jīng)歷了漫長的發(fā)展過程。 20世紀50年代,AI的奠基性工作開始,研究者們試圖通過符號推理來模擬人類思維過程。然而,

    2024年01月19日
    瀏覽(36)
  • 機器學習、人工智能、深度學習三者的區(qū)別

    機器學習、人工智能、深度學習三者的區(qū)別

    目錄 1、三者的關系 2、能做些什么 3、階段性目標 機器學習、人工智能(AI)和深度學習之間有密切的關系,它們可以被看作是一種從不同層面理解和實現(xiàn)智能的方法。 人工智能(AI):人工智能是一門研究如何使計算機能夠模仿人類智能的學科。它涵蓋了各種技術和方法,

    2024年02月14日
    瀏覽(29)
  • 12、人工智能、機器學習、深度學習的關系

    12、人工智能、機器學習、深度學習的關系

    很多年前聽一個機器學習的公開課,在QA環(huán)節(jié),一個同學問了老師一個問題“ 機器學習和深度學習是什么關系 ”? 老師先沒回答,而是反問了在場的同學,結果問了2-3個,沒有人可以回答的很到位,我當時也是初學一臉懵,會場準備的小禮品也沒有拿到。 后來老師解釋“機

    2024年02月05日
    瀏覽(48)
  • 一探究竟:人工智能、機器學習、深度學習

    一探究竟:人工智能、機器學習、深度學習

    1.1 人工智能是什么? ? ? ? ? ?1956年在美國Dartmounth 大學舉辦的一場研討會中提出了人工智能這一概念。人工智能(Artificial Intelligence),簡稱AI,是計算機科學的一個分支,它企圖了解智能的實質,并生產出一種新的能以人類智能相似的方式做出反應的智能機器,該領域的

    2024年02月17日
    瀏覽(28)
  • 機器學習入門教學——人工智能、機器學習、深度學習

    機器學習入門教學——人工智能、機器學習、深度學習

    1、人工智能 人工智能相當于人類的代理人,我們現(xiàn)在所接觸到的人工智能基本上都是弱AI,主要作用是正確解釋從外部獲得的數(shù)據(jù),并對這些數(shù)據(jù)加以學習和利用,以便靈活的實現(xiàn)特定目標和任務。 例如: 阿爾法狗、智能汽車 簡單來說: 人工智能使機器像人類一樣進行感

    2024年02月09日
    瀏覽(94)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包