偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

一文解決任何機(jī)器學(xué)習(xí)問(wèn)題!

人工智能 機(jī)器學(xué)習(xí)
據(jù)挖掘大神Abhishek Thakur,很多數(shù)據(jù)挖掘kaggler對(duì)他都非常熟悉,他在 Linkedin 發(fā)表了一篇名為Approaching (Almost) Any Machine Learning Problem(幾乎解決任何機(jī)器學(xué)習(xí)問(wèn)題)的文章,幾乎可以解決任何機(jī)器學(xué)習(xí)問(wèn)題,可以說(shuō)是他理論+實(shí)踐的最佳產(chǎn)物。這篇文章曾火遍 Kaggle。

前言

數(shù)據(jù)挖掘大神Abhishek Thakur,很多數(shù)據(jù)挖掘kaggler對(duì)他都非常熟悉,他在 Linkedin 發(fā)表了一篇名為Approaching (Almost) Any Machine Learning Problem(幾乎解決任何機(jī)器學(xué)習(xí)問(wèn)題)的文章,幾乎可以解決任何機(jī)器學(xué)習(xí)問(wèn)題,可以說(shuō)是他理論+實(shí)踐的最佳產(chǎn)物。這篇文章曾火遍 Kaggle。

如上對(duì)Approaching (Almost) Any Machine Learning Problem進(jìn)行了中文翻譯,詳細(xì)情況請(qǐng)參照書(shū)籍目錄,覆蓋了機(jī)器學(xué)習(xí)各個(gè)流程。下面我展示一下交叉檢驗(yàn)章節(jié)的翻譯內(nèi)容:

交叉檢驗(yàn)

在上一章中,我們沒(méi)有建立任何模型。原因很簡(jiǎn)單,在創(chuàng)建任何一種機(jī)器學(xué)習(xí)模型之前,我們必須知道什么是交叉檢驗(yàn),以及如何根據(jù)數(shù)據(jù)集選擇最佳交叉檢驗(yàn)數(shù)據(jù)集。

那么,什么是交叉檢驗(yàn),我們?yōu)槭裁匆P(guān)注它?

關(guān)于什么是交叉檢驗(yàn),我們可以找到多種定義。我的定義只有一句話:交叉檢驗(yàn)是構(gòu)建機(jī)器學(xué)習(xí)模型過(guò)程中的一個(gè)步驟,它可以幫助我們確保模型準(zhǔn)確擬合數(shù)據(jù),同時(shí)確保我們不會(huì)過(guò)擬合。但這又引出了另一個(gè)詞:過(guò)擬合。

要解釋過(guò)擬合,我認(rèn)為最好先看一個(gè)數(shù)據(jù)集。有一個(gè)相當(dāng)有名的紅酒質(zhì)量數(shù)據(jù)集(red wine quality dataset)。這個(gè)數(shù)據(jù)集有11個(gè)不同的特征,這些特征決定了紅酒的質(zhì)量。

這些屬性包括:

  • 固定酸度(fixed acidity)
  • 揮發(fā)性酸度(volatile acidity)
  • 檸檬酸(citric acid)
  • 殘留糖(residual sugar)
  • 氯化物(chlorides)
  • 游離二氧化硫(free sulfur dioxide)
  • 二氧化硫總量(total sulfur dioxide)
  • 密度(density)
  • PH值(pH)
  • 硫酸鹽(sulphates)
  • 酒精(alcohol)

根據(jù)這些不同特征,我們需要預(yù)測(cè)紅葡萄酒的質(zhì)量,質(zhì)量值介于0到10之間。

讓我們看看這些數(shù)據(jù)是怎樣的。

import pandas as pd
df = pd.read_csv("winequality-red.csv")

圖 1:紅葡萄酒質(zhì)量數(shù)據(jù)集簡(jiǎn)單展示圖 1:紅葡萄酒質(zhì)量數(shù)據(jù)集簡(jiǎn)單展示

我們可以將這個(gè)問(wèn)題視為分類問(wèn)題,也可以視為回歸問(wèn)題。為了簡(jiǎn)單起見(jiàn),我們選擇分類。然而,這個(gè)數(shù)據(jù)集值包含6種質(zhì)量值。因此,我們將所有質(zhì)量值映射到0到5之間。

quality_mapping = {
    3: 0,
    4: 1,
    5: 2,
    6: 3,
    7: 4,
    8: 5
}
df.loc[:, "quality"] = df.quality.map(quality_mapping)

當(dāng)我們看大這些數(shù)據(jù)并將其視為一個(gè)分類問(wèn)題時(shí),我們腦海中會(huì)浮現(xiàn)出很多可以應(yīng)用的算法,也許,我們可以使用神經(jīng)網(wǎng)絡(luò)。但是,如果我們從一開(kāi)始就深入研究神經(jīng)網(wǎng)絡(luò),那就有點(diǎn)牽強(qiáng)了。所以,讓我們從簡(jiǎn)單的、我們也能可視化的東西開(kāi)始:決策樹(shù)。

在開(kāi)始了解什么是過(guò)擬合之前,我們先將數(shù)據(jù)分為兩部分。這個(gè)數(shù)據(jù)集有1599個(gè)樣本。我們保留1000個(gè)樣本用于訓(xùn)練,599個(gè)樣本作為一個(gè)單獨(dú)的集合。

以下代碼可以輕松完成劃分:

df = df.sample(frac=1).reset_index(drop=True)

df_train = df.head(1000)
df_test = df.tail(599)

現(xiàn)在,我們將在訓(xùn)練集上使用scikit-learn訓(xùn)練一個(gè)決策樹(shù)模型。

from sklearn import tree 
from sklearn import metrics

clf = tree.DecisionTreeClassifier(max_depth=3) 

cols = ['fixed acidity',
        'volatile acidity',
        'citric acid',
        'residual sugar',
        'chlorides',
        'free sulfur dioxide',
        'total sulfur dioxide',
        'density',
        'pH',
        'sulphates',
        'alcohol']

clf.fit(df_train[cols], df_train.quality)

請(qǐng)注意,我將決策樹(shù)分類器的最大深度(max_depth)設(shè)為3。該模型的所有其他參數(shù)均保持默認(rèn)值?,F(xiàn)在,我們?cè)谟?xùn)練集和測(cè)試集上測(cè)試該模型的準(zhǔn)確性:

train_predictions = clf.predict(df_train[cols])

test_predictions = clf.predict(df_test[cols])

train_accuracy = metrics.accuracy_score(
    df_train.quality, train_predictions
)

test_accuracy = metrics.accuracy_score(
    df_test.quality, test_predictions
)

訓(xùn)練和測(cè)試的準(zhǔn)確率分別為58.9%和54.25%。現(xiàn)在,我們將最大深度(max_depth)增加到7,并重復(fù)上述過(guò)程。這樣,訓(xùn)練準(zhǔn)確率為76.6%,測(cè)試準(zhǔn)確率為57.3%。在這里,我們使用準(zhǔn)確率,主要是因?yàn)樗亲钪苯拥闹笜?biāo)。對(duì)于這個(gè)問(wèn)題來(lái)說(shuō),它可能不是最好的指標(biāo)。我們可以根據(jù)最大深度(max_depth)的不同值來(lái)計(jì)算這些準(zhǔn)確率,并繪制曲線圖。

from sklearn import tree
from sklearn import metrics 
import matplotlib
import matplotlib.pyplot as plt
import seaborn as sns
matplotlib.rc('xtick', labelsize=20)
matplotlib.rc('ytick', labelsize=20)
%matplotlib inline
train_accuracies = [0.5]
test_accuracies = [0.5]
for depth in range(1, 25):
    clf = tree.DecisionTreeClassifier(max_depth=depth)
    cols = [
        'fixed acidity',
        'volatile acidity',
        'citric acid',
        'residual sugar',
        'chlorides',
        'free sulfur dioxide',
        'total sulfur dioxide',
        'density',
        'pH',
        'sulphates',
        'alcohol'
    ]
    clf.fit(df_train[cols], df_train.quality)
    train_predictions = clf.predict(df_train[cols]) 
    test_predictions = clf.predict(df_test[cols])

    train_accuracy = metrics.accuracy_score(
        df_train.quality, train_predictions
    )
    test_accuracy = metrics.accuracy_score(
        df_test.quality, test_predictions
    )
    train_accuracies.append(train_accuracy)
    test_accuracies.append(test_accuracy)

plt.figure(figsize=(10, 5)) 
sns.set_style("whitegrid")
plt.plot(train_accuracies, label="train accuracy")
plt.plot(test_accuracies, label="test accuracy")
plt.legend(loc="upper left", prop={'size': 15})
plt.xticks(range(0, 26, 5))
plt.xlabel("max_depth", size=20)
plt.ylabel("accuracy", size=20)
plt.show()

這將生成如圖 2 所示的曲線圖。

圖 2:不同 max_depth 訓(xùn)練和測(cè)試準(zhǔn)確率圖 2:不同 max_depth 訓(xùn)練和測(cè)試準(zhǔn)確率

我們可以看到,當(dāng)最大深度(max_depth)的值為14時(shí),測(cè)試數(shù)據(jù)的得分最高。隨著我們不斷增加這個(gè)參數(shù)的值,測(cè)試準(zhǔn)確率會(huì)保持不變或變差,但訓(xùn)練準(zhǔn)確率會(huì)不斷提高。這說(shuō)明,隨著最大深度(max_depth)的增加,決策樹(shù)模型對(duì)訓(xùn)練數(shù)據(jù)的學(xué)習(xí)效果越來(lái)越好,但測(cè)試數(shù)據(jù)的性能卻絲毫沒(méi)有提高。

這就是所謂的過(guò)擬合。

模型在訓(xùn)練集上完全擬合,而在測(cè)試集上卻表現(xiàn)不佳。這意味著模型可以很好地學(xué)習(xí)訓(xùn)練數(shù)據(jù),但無(wú)法泛化到未見(jiàn)過(guò)的樣本上。在上面的數(shù)據(jù)集中,我們可以建立一個(gè)最大深度(max_depth)非常高的模型,它在訓(xùn)練數(shù)據(jù)上會(huì)有出色的結(jié)果,但這種模型并不實(shí)用,因?yàn)樗谡鎸?shí)世界的樣本或?qū)崟r(shí)數(shù)據(jù)上不會(huì)提供類似的結(jié)果。

有人可能會(huì)說(shuō),這種方法并沒(méi)有過(guò)擬合,因?yàn)闇y(cè)試集的準(zhǔn)確率基本保持不變。過(guò)擬合的另一個(gè)定義是,當(dāng)我們不斷提高訓(xùn)練損失時(shí),測(cè)試損失也在增加。這種情況在神經(jīng)網(wǎng)絡(luò)中非常常見(jiàn)。

每當(dāng)我們訓(xùn)練一個(gè)神經(jīng)網(wǎng)絡(luò)時(shí),都必須在訓(xùn)練期間監(jiān)控訓(xùn)練集和測(cè)試集的損失。如果我們有一個(gè)非常大的網(wǎng)絡(luò)來(lái)處理一個(gè)非常小的數(shù)據(jù)集(即樣本數(shù)非常少),我們就會(huì)觀察到,隨著我們不斷訓(xùn)練,訓(xùn)練集和測(cè)試集的損失都會(huì)減少。但是,在某個(gè)時(shí)刻,測(cè)試損失會(huì)達(dá)到最小值,之后,即使訓(xùn)練損失進(jìn)一步減少,測(cè)試損失也會(huì)開(kāi)始增加。我們必須在驗(yàn)證損失達(dá)到最小值時(shí)停止訓(xùn)練。

這是對(duì)過(guò)擬合最常見(jiàn)的解釋。

奧卡姆剃刀用簡(jiǎn)單的話說(shuō),就是不要試圖把可以用簡(jiǎn)單得多的方法解決的事情復(fù)雜化。換句話說(shuō),最簡(jiǎn)單的解決方案就是最具通用性的解決方案。一般來(lái)說(shuō),只要你的模型不符合奧卡姆剃刀原則,就很可能是過(guò)擬合。

圖 3:過(guò)擬合的最一般定義圖 3:過(guò)擬合的最一般定義

現(xiàn)在我們可以回到交叉檢驗(yàn)。

在解釋過(guò)擬合時(shí),我決定將數(shù)據(jù)分為兩部分。我在其中一部分上訓(xùn)練模型,然后在另一部分上檢查其性能。這也是交叉檢驗(yàn)的一種,通常被稱為 "暫留集"(hold-out set)。當(dāng)我們擁有大量數(shù)據(jù),而模型推理是一個(gè)耗時(shí)的過(guò)程時(shí),我們就會(huì)使用這種(交叉)驗(yàn)證。

交叉檢驗(yàn)有許多不同的方法,它是建立一個(gè)良好的機(jī)器學(xué)習(xí)模型的最關(guān)鍵步驟。選擇正確的交叉檢驗(yàn)取決于所處理的數(shù)據(jù)集,在一個(gè)數(shù)據(jù)集上適用的交叉檢驗(yàn)也可能不適用于其他數(shù)據(jù)集。不過(guò),有幾種類型的交叉檢驗(yàn)技術(shù)最為流行和廣泛使用。

其中包括:

  • k折交叉檢驗(yàn)
  • 分層k折交叉檢驗(yàn)
  • 暫留交叉檢驗(yàn)
  • 留一交叉檢驗(yàn)
  • 分組k折交叉檢驗(yàn)

交叉檢驗(yàn)是將訓(xùn)練數(shù)據(jù)分層幾個(gè)部分,我們?cè)谄渲幸徊糠稚嫌?xùn)練模型,然后在其余部分上進(jìn)行測(cè)試。請(qǐng)看圖4。

圖 4:將數(shù)據(jù)集拆分為訓(xùn)練集和驗(yàn)證集圖 4:將數(shù)據(jù)集拆分為訓(xùn)練集和驗(yàn)證集

圖 4 和圖 5 說(shuō)明,當(dāng)你得到一個(gè)數(shù)據(jù)集來(lái)構(gòu)建機(jī)器學(xué)習(xí)模型時(shí),你會(huì)把它們分成兩個(gè)不同的集:訓(xùn)練集和驗(yàn)證集。很多人還會(huì)將其分成第三組,稱之為測(cè)試集。不過(guò),我們將只使用兩個(gè)集。如你所見(jiàn),我們將樣本和與之相關(guān)的目標(biāo)進(jìn)行了劃分。我們可以將數(shù)據(jù)分為 k 個(gè)互不關(guān)聯(lián)的不同集合。這就是所謂的 k 折交叉檢驗(yàn)。

圖 5:K 折交叉檢驗(yàn)圖 5:K 折交叉檢驗(yàn)

我們可以使用scikit-learn中的KFold將任何數(shù)據(jù)分割成k個(gè)相等的部分。每個(gè)樣本分配一個(gè)從0到k-1的值。

import pandas as pd
from sklearn import model_selection

if __name__ == "__main__":
    df = pd.read_csv("train.csv")
    df["kfold"] = -1
    df = df.sample(frac=1).reset_index(drop=True)
    kf = model_selection.KFold(n_splits=5)
    for fold, (trn_, val_) in enumerate(kf.split(X=df)): 
        df.loc[val_, 'kfold'] = fold
        df.to_csv("train_folds.csv", index=False)

幾乎所有類型的數(shù)據(jù)集都可以使用此流程。例如,當(dāng)數(shù)據(jù)圖像時(shí),您可以創(chuàng)建一個(gè)包含圖像 ID、圖像位置和圖像標(biāo)簽的 CSV,然后使用上述流程。

另一種重要的交叉檢驗(yàn)類型是分層k折交叉檢驗(yàn)。如果你有一個(gè)偏斜的二元分類數(shù)據(jù)集,其中正樣本占 90%,負(fù)樣本只占 10%,那么你就不應(yīng)該使用隨機(jī) k 折交叉。對(duì)這樣的數(shù)據(jù)集使用簡(jiǎn)單的k折交叉檢驗(yàn)可能會(huì)導(dǎo)致折疊樣本全部為負(fù)樣本。在這種情況下,我們更傾向于使用分層 k 折交叉檢驗(yàn)。分層 k 折交叉檢驗(yàn)可以保持每個(gè)折中標(biāo)簽的比例不變。因此,在每個(gè)折疊中,都會(huì)有相同的 90% 正樣本和 10% 負(fù)樣本。因此,無(wú)論您選擇什么指標(biāo)進(jìn)行評(píng)估,都會(huì)在所有折疊中得到相似的結(jié)果。

修改創(chuàng)建 k 折交叉檢驗(yàn)的代碼以創(chuàng)建分層 k 折交叉檢驗(yàn)也很容易。我們只需將 model_selection.KFold更改為 model_selection.StratifiedKFold ,并在 kf.split(...) 函數(shù)中指定要分層的目標(biāo)列。我們假設(shè) CSV 數(shù)據(jù)集有一列名為 "target" ,并且是一個(gè)分類問(wèn)題。

import pandas as pd
from sklearn import model_selection 
if __name__ == "__main__":
    df = pd.read_csv("train.csv")
    df["kfold"] = -1
    df = df.sample(frac=1).reset_index(drop=True)
    y = df.target.values
    kf = model_selection.StratifiedKFold(n_splits=5)
    for f, (t_, v_) in enumerate(kf.split(X=df, y=y)): 
        df.loc[v_, 'kfold'] = f
        df.to_csv("train_folds.csv", index=False)

對(duì)于葡萄酒數(shù)據(jù)集,我們來(lái)看看標(biāo)簽的分布情況。

b = sns.countplot(x='quality', data=df)
b.set_xlabel("quality", fontsize=20) 
b.set_ylabel("count", fontsize=20)

請(qǐng)注意,我們繼續(xù)上面的代碼。因此,我們已經(jīng)轉(zhuǎn)換了目標(biāo)值。從圖 6 中我們可以看出,質(zhì)量偏差很大。有些類別有很多樣本,有些則沒(méi)有那么多。如果我們進(jìn)行簡(jiǎn)單的k折交叉檢驗(yàn),那么每個(gè)折疊中的目標(biāo)值分布都不會(huì)相同。因此,在這種情況下,我們選擇分層 k 折交叉檢驗(yàn)。

圖 6:葡萄酒數(shù)據(jù)集中 "質(zhì)量" 分布情況圖 6:葡萄酒數(shù)據(jù)集中 "質(zhì)量" 分布情況

規(guī)則很簡(jiǎn)單,如果是標(biāo)準(zhǔn)分類問(wèn)題,就盲目選擇分層k折交叉檢驗(yàn)。

但如果數(shù)據(jù)量很大,該怎么辦呢?假設(shè)我們有 100 萬(wàn)個(gè)樣本。5 倍交叉檢驗(yàn)意味著在 800k 個(gè)樣本上進(jìn)行訓(xùn)練,在 200k 個(gè)樣本上進(jìn)行驗(yàn)證。根據(jù)我們選擇的算法,對(duì)于這樣規(guī)模的數(shù)據(jù)集來(lái)說(shuō),訓(xùn)練甚至驗(yàn)證都可能非常昂貴。在這種情況下,我們可以選擇暫留交叉檢驗(yàn)。

創(chuàng)建保持結(jié)果的過(guò)程與分層 k 折交叉檢驗(yàn)相同。對(duì)于擁有 100 萬(wàn)個(gè)樣本的數(shù)據(jù)集,我們可以創(chuàng)建 10 個(gè)折疊而不是 5 個(gè),并保留其中一個(gè)折疊作為保留樣本。這意味著,我們將有 10 萬(wàn)個(gè)樣本被保留下來(lái),我們將始終在這個(gè)樣本集上計(jì)算損失、準(zhǔn)確率和其他指標(biāo),并在 90 萬(wàn)個(gè)樣本上進(jìn)行訓(xùn)練。

在處理時(shí)間序列數(shù)據(jù)時(shí),暫留交叉檢驗(yàn)也非常常用。假設(shè)我們要解決的問(wèn)題是預(yù)測(cè)一家商店 2020 年的銷售額,而我們得到的是 2015-2019 年的所有數(shù)據(jù)。在這種情況下,你可以選擇 2019 年的所有數(shù)據(jù)作為保留數(shù)據(jù),然后在 2015 年至 2018 年的所有數(shù)據(jù)上訓(xùn)練你的模型。

圖 7:時(shí)間序列數(shù)據(jù)示例圖 7:時(shí)間序列數(shù)據(jù)示例

在圖 7 所示的示例中,假設(shè)我們的任務(wù)是預(yù)測(cè)從時(shí)間步驟 31 到 40 的銷售額。我們可以保留 21 至 30 步的數(shù)據(jù),然后從 0 步到 20 步訓(xùn)練模型。需要注意的是,在預(yù)測(cè) 31 步至 40 步時(shí),應(yīng)將 21 步至 30 步的數(shù)據(jù)納入模型,否則,模型的性能將大打折扣。

在很多情況下,我們必須處理小型數(shù)據(jù)集,而創(chuàng)建大型驗(yàn)證集意味著模型學(xué)習(xí)會(huì)丟失大量數(shù)據(jù)。在這種情況下,我們可以選擇留一交叉檢驗(yàn),相當(dāng)于特殊的 k 則交叉檢驗(yàn)其中 k=N ,N 是數(shù)據(jù)集中的樣本數(shù)。這意味著在所有的訓(xùn)練折疊中,我們將對(duì)除 1 之外的所有數(shù)據(jù)樣本進(jìn)行訓(xùn)練。這種類型的交叉檢驗(yàn)的折疊數(shù)與數(shù)據(jù)集中的樣本數(shù)相同。

需要注意的是,如果模型的速度不夠快,這種類型的交叉檢驗(yàn)可能會(huì)耗費(fèi)大量時(shí)間,但由于這種交叉檢驗(yàn)只適用于小型數(shù)據(jù)集,因此并不重要。

現(xiàn)在我們可以轉(zhuǎn)向回歸問(wèn)題了。回歸問(wèn)題的好處在于,除了分層 k 折交叉檢驗(yàn)之外,我們可以在回歸問(wèn)題上使用上述所有交叉檢驗(yàn)技術(shù)。也就是說(shuō),我們不能直接使用分層 k 折交叉檢驗(yàn),但有一些方法可以稍稍改變問(wèn)題,從而在回歸問(wèn)題中使用分層 k 折交叉檢驗(yàn)。大多數(shù)情況下,簡(jiǎn)單的 k 折交叉檢驗(yàn)適用于任何回歸問(wèn)題。但是,如果發(fā)現(xiàn)目標(biāo)分布不一致,就可以使用分層 k 折交叉檢驗(yàn)。

要在回歸問(wèn)題中使用分層 k 折交叉檢驗(yàn),我們必須先將目標(biāo)劃分為若干個(gè)分層,然后再以處理分類問(wèn)題的相同方式使用分層 k 折交叉檢驗(yàn)。選擇合適的分層數(shù)有幾種選擇。如果樣本量很大(> 10k,> 100k),那么就不需要考慮分層的數(shù)量。只需將數(shù)據(jù)分為 10 或 20層即可。如果樣本數(shù)不多,則可以使用 Sturge's Rule 這樣的簡(jiǎn)單規(guī)則來(lái)計(jì)算適當(dāng)?shù)姆謱訑?shù)。

Sturge's Rule: ????????????=1+???2(?) 其中 $N$ 是數(shù)據(jù)集中的樣本數(shù)。該函數(shù)如圖8所示。

圖 8:利用斯特格法則繪制樣本與箱數(shù)對(duì)比圖圖 8:利用斯特格法則繪制樣本與箱數(shù)對(duì)比圖

讓我們制作一個(gè)回歸數(shù)據(jù)集樣本,并嘗試應(yīng)用分層 k 折交叉檢驗(yàn),如下面的 python 代碼段所示。

import numpy as np
import pandas as pd
from sklearn import datasets
from sklearn import model_selection

def create_folds(data):
    data["kfold"] = -1
    data = data.sample(frac=1).reset_index(drop=True)

    num_bins = int(np.floor(1 + np.log2(len(data)))) 
    data.loc[:, "bins"] = pd.cut(
        data["target"], bins=num_bins, labels=False 
    )
    kf = model_selection.StratifiedKFold(n_splits=5)
    for f, (t_, v_) in enumerate(kf.split(X=data, y=data.bins.values)): 
        data.loc[v_, 'kfold'] = f
        data = data.drop("bins", axis=1) 
    return data

if __name__ == "__main__":
    X, y = datasets.make_regression(
        n_samples=15000, n_features=100, n_targets=1 
    )
df = pd.DataFrame(
    X,
    columns=[f"f_{i}" for i in range(X.shape[1])] 
)
df.loc[:, "target"] = y 
df = create_folds(df)

交叉檢驗(yàn)是構(gòu)建機(jī)器學(xué)習(xí)模型的第一步,也是最基本的一步。如果要做特征工程,首先要拆分?jǐn)?shù)據(jù)。如果要建立模型,首先要拆分?jǐn)?shù)據(jù)。如果你有一個(gè)好的交叉檢驗(yàn)方案,其中驗(yàn)證數(shù)據(jù)能夠代表訓(xùn)練數(shù)據(jù)和真實(shí)世界的數(shù)據(jù),那么你就能建立一個(gè)具有高度通用性的好的機(jī)器學(xué)習(xí)模型。

本章介紹的交叉檢驗(yàn)類型幾乎適用于所有機(jī)器學(xué)習(xí)問(wèn)題。不過(guò),你必須記住,交叉檢驗(yàn)也在很大程度上取決于數(shù)據(jù),你可能需要根據(jù)你的問(wèn)題和數(shù)據(jù)采用新的交叉檢驗(yàn)形式。

例如,假設(shè)我們有一個(gè)問(wèn)題,希望建立一個(gè)模型,從患者的皮膚圖像中檢測(cè)出皮膚癌。我們的任務(wù)是建立一個(gè)二元分類器,該分類器接收輸入圖像并預(yù)測(cè)其良性或惡性的概率。

在這類數(shù)據(jù)集中,訓(xùn)練數(shù)據(jù)集中可能有同一患者的多張圖像。因此,要在這里建立一個(gè)良好的交叉檢驗(yàn)系統(tǒng),必須有分層的 k 折交叉檢驗(yàn),但也必須確保訓(xùn)練數(shù)據(jù)中的患者不會(huì)出現(xiàn)在驗(yàn)證數(shù)據(jù)中。幸運(yùn)的是,scikit-learn 提供了一種稱為 GroupKFold 的交叉檢驗(yàn)類型。在這里,患者可以被視為組。但遺憾的是,scikit-learn 無(wú)法將 GroupKFold 與 StratifiedKFold 結(jié)合起來(lái)。所以你需要自己動(dòng)手。我把它作為一個(gè)練習(xí)留給讀者的練習(xí)。

責(zé)任編輯:華軒 來(lái)源: 數(shù)據(jù)分析及應(yīng)用
相關(guān)推薦

2023-05-11 15:24:12

2023-07-26 07:22:32

2020-11-08 13:33:05

機(jī)器學(xué)習(xí)數(shù)據(jù)中毒人工智能

2017-10-24 11:19:16

深度學(xué)習(xí)機(jī)器學(xué)習(xí)數(shù)據(jù)

2020-05-12 15:40:06

MySQ數(shù)據(jù)庫(kù)索引

2022-01-06 07:45:44

機(jī)器學(xué)習(xí)算法思路

2018-10-18 11:00:50

人工智能機(jī)器學(xué)習(xí)模型偏差

2012-02-09 13:47:11

360

2017-10-22 06:05:28

語(yǔ)音識(shí)別深度學(xué)習(xí)ASR

2024-05-21 09:45:40

機(jī)器學(xué)習(xí)人工智能XAI

2024-03-01 19:26:22

2024-04-09 14:04:38

人工智能機(jī)器學(xué)習(xí)

2017-07-21 10:42:27

自動(dòng)駕駛應(yīng)用機(jī)器學(xué)習(xí)

2018-08-08 16:08:45

深度學(xué)習(xí)機(jī)器學(xué)習(xí)NLP

2022-08-11 13:49:37

機(jī)器學(xué)習(xí)技術(shù)

2018-08-23 04:26:54

合成數(shù)據(jù)機(jī)器學(xué)習(xí)數(shù)據(jù)集

2018-11-16 09:08:35

2022-03-01 20:41:00

機(jī)器學(xué)習(xí)特征人工智能

2017-12-01 12:36:54

LDA模型機(jī)器

2022-04-11 10:56:43

線程安全
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)