欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python 留一交叉驗證的實例

 更新時間:2022年07月14日 09:59:24   作者:Dragon水魅  
這篇文章主要介紹了python 留一交叉驗證的實例代碼,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

python 留一交叉驗證

基本原理

K折交叉驗證

簡單來說,K折交叉驗證就是:

  • 把數(shù)據(jù)集劃分成K份,取出其中一份作為測試集,另外的K - 1份作為訓練集。
  • 通過訓練集得到回歸方程,再把測試集帶入該回歸方程,得到預測值。
  • 計算預測值與真實值的差值的平方,得到平方損失函數(shù)(或其他的損失函數(shù))。
  • 重復以上過程,總共得到K個回歸方程和K個損失函數(shù),其中損失函數(shù)最小的回歸方程就是最優(yōu)解。

留一交叉驗證

留一交叉驗證是K折交叉驗證的特殊情況,即:將數(shù)據(jù)集劃分成N份,N為數(shù)據(jù)集總數(shù)。就是只留一個數(shù)據(jù)作為測試集,該特殊情況稱為“留一交叉驗證”。

代碼實現(xiàn)

'''留一交叉驗證'''
import numpy as np

# K折交叉驗證
data = [[12, 1896], [11, 1900], [11, 1904], [10.8, 1908], [10.8, 1912], [10.8, 1920], [10.6, 1924], [10.8, 1928],
        [10.3, 1932], [10.3, 1936], [10.3, 1948], [10.4, 1952], [10.5, 1956], [10.2, 1960], [10.0, 1964], [9.95, 1968],
        [10.14, 1972], [10.06, 1976], [10.25, 1980], [9.99, 1984], [9.92, 1988], [9.96, 1992], [9.84, 1996],
        [9.87, 2000], [9.85, 2004], [9.69, 2008]]

length = len(data)

# 得到訓練集和測試集
def Get_test_train(length, data, i):
    test_data = data[i]  # 測試集
    train_data = data[:]
    train_data.pop(i)  # 訓練集
    return train_data, test_data

# 得到線性回歸直線
def Get_line(train_data):
    time = []
    year = []
    average_year_time = 0
    average_year_year = 0

    for i in train_data:
        time.append(i[0])
        year.append(i[1])

    time = np.array(time)
    year = np.array(year)

    average_year = sum(year) / length  # year拔
    average_time = sum(time) / length  # time拔

    for i in train_data:
        average_year_time = average_year_time + i[0] * i[1]
        average_year_year = average_year_year + i[1] ** 2
    average_year_time = average_year_time / length  # (year, time)拔
    average_year_year = average_year_year / length  # (year, year)拔
    # 線性回歸:t = w0 + w1 * x
    w1 = (average_year_time - average_year * average_time) / (average_year_year - average_year * average_year)
    w0 = average_time - w1 * average_year
    return w0, w1

# 得到損失函數(shù)
def Get_loss_func(w0, w1, test_data):
    time_real = test_data[0]
    time_predict = eval('{} + {} * {}'.format(w0, w1, test_data[1]))
    loss = (time_predict - time_real) ** 2
    dic['t = {} + {}x'.format(w0, w1)] = loss
    return dic

if __name__ == '__main__':
    dic = {}  # 存放建為回歸直線,值為損失函數(shù)的字典

    for i in range(length):
        train_data, test_data = Get_test_train(length, data, i)
        w0, w1 = Get_line(train_data)
        Get_loss_func(w0, w1, test_data)
        dic = Get_loss_func(w0, w1, test_data)

    min_loss = min(dic.values())
    best_line = [k for k, v in dic.items() if v == min_loss][0]
    print('最佳回歸直線:', best_line)
    print('最小損失函數(shù):', min_loss)

留一法交叉驗證 Leave-One-Out Cross Validation

交叉驗證法,就是把一個大的數(shù)據(jù)集分為 k 個小數(shù)據(jù)集,其中 k−1 個作為訓練集,剩下的 1 11 個作為測試集,在訓練和測試的時候依次選擇訓練集和它對應的測試集。這種方法也被叫做 k 折交叉驗證法(k-fold cross validation)。最終的結(jié)果是這 k 次驗證的均值。

此外,還有一種交叉驗證方法就是 留一法(Leave-One-Out,簡稱LOO),顧名思義,就是使 k kk 等于數(shù)據(jù)集中數(shù)據(jù)的個數(shù),每次只使用一個作為測試集,剩下的全部作為訓練集,這種方法得出的結(jié)果與訓練整個測試集的期望值最為接近,但是成本過于龐大。

我們用SKlearn庫來實現(xiàn)一下LOO

from sklearn.model_selection import LeaveOneOut

# 一維示例數(shù)據(jù)
data_dim1 = [1, 2, 3, 4, 5]

# 二維示例數(shù)據(jù)
data_dim2 = [[1, 1, 1, 1],
             [2, 2, 2, 2],
             [3, 3, 3, 3],
             [4, 4, 4, 4],
             [5, 5, 5, 5]]

loo = LeaveOneOut() # 實例化LOO對象

# 取LOO訓練、測試集數(shù)據(jù)索引
for train_idx, test_idx in loo.split(data_dim1):
    # train_idx 是指訓練數(shù)據(jù)在總數(shù)據(jù)集上的索引位置
    # test_idx 是指測試數(shù)據(jù)在總數(shù)據(jù)集上的索引位置
    print("train_index: %s, test_index %s" % (train_idx, test_idx))

# 取LOO訓練、測試集數(shù)據(jù)值
for train_idx, test_idx in loo.split(data_dim1):
    # train_idx 是指訓練數(shù)據(jù)在總數(shù)據(jù)集上的索引位置
    # test_idx 是指測試數(shù)據(jù)在總數(shù)據(jù)集上的索引位置
    train_data = [data_dim1[i] for i in train_idx]
    test_data = [data_dim1[i] for i in test_idx]
    print("train_data: %s, test_data %s" % (train_data, test_data))

data_dim1的輸出:

train_index: [1 2 3 4], test_index [0]
train_index: [0 2 3 4], test_index [1]
train_index: [0 1 3 4], test_index [2]
train_index: [0 1 2 4], test_index [3]
train_index: [0 1 2 3], test_index [4]

train_data: [2, 3, 4, 5], test_data [1]
train_data: [1, 3, 4, 5], test_data [2]
train_data: [1, 2, 4, 5], test_data [3]
train_data: [1, 2, 3, 5], test_data [4]
train_data: [1, 2, 3, 4], test_data [5]

data_dim2的輸出:

train_index: [1 2 3 4], test_index [0]
train_index: [0 2 3 4], test_index [1]
train_index: [0 1 3 4], test_index [2]
train_index: [0 1 2 4], test_index [3]
train_index: [0 1 2 3], test_index [4]

train_data: [[2, 2, 2, 2], [3, 3, 3, 3], [4, 4, 4, 4], [5, 5, 5, 5]], test_data [[1, 1, 1, 1]]
train_data: [[1, 1, 1, 1], [3, 3, 3, 3], [4, 4, 4, 4], [5, 5, 5, 5]], test_data [[2, 2, 2, 2]]
train_data: [[1, 1, 1, 1], [2, 2, 2, 2], [4, 4, 4, 4], [5, 5, 5, 5]], test_data [[3, 3, 3, 3]]
train_data: [[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3], [5, 5, 5, 5]], test_data [[4, 4, 4, 4]]
train_data: [[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3], [4, 4, 4, 4]], test_data [[5, 5, 5, 5]]

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 如何用Python從桌面讀取二維碼信息詳解

    如何用Python從桌面讀取二維碼信息詳解

    二維碼作為一種信息傳遞的工具,在當今社會發(fā)揮了重要作用,下面這篇文章主要給大家介紹了關(guān)于如何用Python從桌面讀取二維碼信息的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-10-10
  • 基于pandas中expand的作用詳解

    基于pandas中expand的作用詳解

    今天小編就為大家分享一篇基于pandas中expand的作用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python Selenium網(wǎng)頁自動化利器使用詳解

    Python Selenium網(wǎng)頁自動化利器使用詳解

    這篇文章主要為大家介紹了使用Python Selenium實現(xiàn)網(wǎng)頁自動化示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • 如何利用python實現(xiàn)列表嵌套字典取值

    如何利用python實現(xiàn)列表嵌套字典取值

    這篇文章主要介紹了如何利用python實現(xiàn)列表嵌套字典取值,首先通過將列表backup_unit_id全部提取出來,確定需要取值的對象展開文章內(nèi)容,感興趣的朋友可以看一下
    2022-06-06
  • 基于python計算滾動方差(標準差)talib和pd.rolling函數(shù)差異詳解

    基于python計算滾動方差(標準差)talib和pd.rolling函數(shù)差異詳解

    這篇文章主要介紹了基于python計算滾動方差(標準差)talib和pd.rolling函數(shù)差異詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • python3操作redis實現(xiàn)List列表實例

    python3操作redis實現(xiàn)List列表實例

    本文主要介紹了python3操作redis實現(xiàn)List列表實例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • python多線程互斥鎖與死鎖問題詳解

    python多線程互斥鎖與死鎖問題詳解

    大家好,本篇文章主要講的是python多線程互斥鎖與死鎖問題詳解,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • Django+Bootstrap實現(xiàn)計算器的示例代碼

    Django+Bootstrap實現(xiàn)計算器的示例代碼

    本文主要介紹了Django+Bootstrap實現(xiàn)計算器的示例代碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Python 不同對象比較大小示例探討

    Python 不同對象比較大小示例探討

    不同對象比較是按照 type names 比較,當相同類型對象不支持適當比較的時候,采用 address 比較,需要的朋友可以參考下
    2014-08-08
  • Python最長公共子串算法實例

    Python最長公共子串算法實例

    這篇文章主要介紹了Python最長公共子串算法,實例分析了Python字符串操作的技巧,需要的朋友可以參考下
    2015-03-03

最新評論