Hướng dẫn cross validation code in python - mã xác thực chéo trong python

Abhishek Hazra - Xuất bản vào ngày 19 tháng 11 năm 2021 và sửa đổi lần cuối vào ngày 3 tháng 8 năm 2022

PLES mà nó vừa thấy sẽ có một số điểm hoàn hảo nhưng sẽ không dự đoán được bất cứ điều gì hữu ích trên dữ liệu chưa từng thấy. Tình huống này được gọi là quá mức. Để khắc phục vấn đề quá mức, chúng tôi sử dụng xác thực chéo. Vì vậy, bạn phải xác thực chéo là gì? Và làm thế nào nó có thể giải quyết vấn đề quá mức?overfitting. To overcome the problem of overfitting we use cross-validation. So you must what is cross-validation ? and how can it solve the problem of overfitting?

Source://www.datarobot.com/wiki/overfitting///www.datarobot.com/wiki/overfitting/

Xác thực chéo là gì?

Xác thực chéo là một phương pháp thống kê được sử dụng để ước tính hiệu suất của các mô hình học máy. Đây là một phương pháp để đánh giá kết quả phân tích thống kê sẽ khái quát hóa thành một tập dữ liệu độc lập như thế nào.

Làm thế nào để nó giải quyết vấn đề quá mức?

Trong xác thực chéo, chúng tôi sử dụng dữ liệu đào tạo ban đầu của chúng tôi để tạo ra nhiều lần phân tách thử nghiệm xe lửa mini. Sử dụng các phân tách này để điều chỉnh mô hình của bạn. Ví dụ, trong xác thực chéo K tiêu chuẩn, chúng tôi phân vùng dữ liệu thành các tập hợp K. Sau đó, chúng tôi lặp đi lặp lại thuật toán trên các tập hợp K-1 trong khi sử dụng tập hợp con còn lại làm bộ thử nghiệm. Theo cách này, chúng tôi có thể kiểm tra mô hình của chúng tôi trên dữ liệu hoàn toàn chưa từng thấy. Trong bài viết này, bạn có thể đọc về 7 kỹ thuật xác thực chéo được sử dụng phổ biến nhất cùng với ưu và nhược điểm của chúng. Tôi cũng đã cung cấp đoạn mã cho từng kỹ thuật.

Các kỹ thuật được liệt kê dưới đây:

1. Giữ xác thực chéo

2. Xác thực chéo K-Fold

3. Xác thực chéo K tầng phân tầng

4. Để lại xác nhận chéo bĩ

5. Để lại một xác thực chéo

6. Monte Carlo [shuffle-split]

7. Chuỗi thời gian [xác thực chéo]. Time Series [ Rolling cross-validation]

1. Xác thực chéo hoặc phân chia thử nghiệm chéo

Trong kỹ thuật xác thực chéo này, toàn bộ bộ dữ liệu được phân vùng ngẫu nhiên thành một tập huấn luyện và bộ xác nhận. Sử dụng một quy tắc ngón tay cái gần 70% toàn bộ bộ dữ liệu được sử dụng làm bộ đào tạo và 30% còn lại được sử dụng làm bộ xác thực.

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; ImageSource: Blog.jcharistech.comImageSource: blog.jcharistech.com

Pros:

1. Nhanh chóng thực hiện: Vì chúng tôi phải chia bộ dữ liệu thành tập huấn luyện và xác thực chỉ một lần và mô hình sẽ được xây dựng chỉ một lần trên bộ đào tạo nên được thực hiện nhanh chóng.: As we have to split the dataset into training and validation set just once and the model will be built just once on the training set so gets executed quickly.

Cons::

1. Không phù hợp với một bộ dữ liệu mất cân bằng: Giả sử chúng ta có một bộ dữ liệu mất cân bằng có lớp ‘0, và lớp’ 1. Hãy nói rằng 80% dữ liệu thuộc về lớp ‘0, và 20% dữ liệu còn lại cho lớp‘ 1. Có thể xảy ra rằng tất cả 80% dữ liệu của lớp ‘0, có thể nằm trong tập huấn luyện và tất cả dữ liệu của lớp‘ 1 trong tập kiểm tra. Vì vậy, mô hình của chúng tôi sẽ không khái quát tốt cho dữ liệu thử nghiệm của chúng tôi vì nó đã thấy dữ liệu của lớp ’1 trước đó.Suppose we have an imbalanced dataset that has class ‘0’ and class ‘1’. Let’s say 80% of data belongs to class ‘0’ and the remaining 20% data to class ‘1’.On doing train-test split with train set size as 80% and test data size as 20% of the dataset. It may happen that all 80% data of class ‘0’ may be in the training set and all data of class ‘1’ in the test set. So our model will not generalize well for our test data as it hasn’t seen data of class ‘1’ before.

2. Một lượng lớn dữ liệu bị tước mất việc đào tạo mô hình.

Trong trường hợp của một bộ dữ liệu nhỏ, một bộ phận sẽ được dành để thử nghiệm mô hình có thể có các đặc điểm quan trọng mà mô hình của chúng tôi có thể bỏ lỡ vì nó không được đào tạo về dữ liệu đó.

Mã Python:

2. Xác thực chéo K-Fold

Trong kỹ thuật xác nhận chéo gấp K, toàn bộ bộ dữ liệu được phân vùng thành các phần K có kích thước bằng nhau. Mỗi phân vùng được gọi là một nếp gấp. Một lần được sử dụng làm bộ xác thực và các nếp gấp K-1 còn lại được sử dụng làm bộ đào tạo.Fold“.So as we have K parts we call it K-Folds. One Fold is used as a validation set and the remaining K-1 folds are used as the training set.

Kỹ thuật được lặp lại k lần cho đến khi mỗi lần được sử dụng làm bộ xác thực và các nếp gấp còn lại như tập huấn luyện.

Độ chính xác cuối cùng của mô hình được tính toán bằng cách lấy độ chính xác trung bình của dữ liệu xác thực mô hình K.

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Nguồn hình ảnh: Scikit-learn.orgscikit-learn.org

Pros:

1. Toàn bộ bộ dữ liệu được sử dụng làm cả tập huấn luyện và bộ xác thực:

Cons:

1. Không được sử dụng cho các bộ dữ liệu mất cân bằng: như được thảo luận trong trường hợp xác thực chéo nắm giữ, trong trường hợp xác thực gấp K của lớp học 0 0. Và bộ xác thực sẽ có một mẫu lớp 1 1.As discussed in the case of HoldOut cross-validation, in the case of K-Fold validation too it may happen that all samples of training set will have no sample form class “1” and only of class “0”.And the validation set will have a sample of class “1”.

2. Không phù hợp với dữ liệu chuỗi thời gian: Đối với dữ liệu chuỗi thời gian, thứ tự của các mẫu có vấn đề. Nhưng trong xác nhận chéo K gấp K, các mẫu được chọn theo thứ tự ngẫu nhiên.For Time Series data the order of the samples matter. But in K-Fold Cross-Validation, samples are selected in random order.

Mã Python:

from sklearn.datasets import load_iris
from sklearn.model_selection import cross_val_score,KFold
from sklearn.linear_model import LogisticRegression
iris=load_iris[]
X=iris.data
Y=iris.target
logreg=LogisticRegression[]
kf=KFold[n_splits=5]
score=cross_val_score[logreg,X,Y,cv=kf]
print["Cross Validation Scores are {}".format[score]]
print["Average Cross Validation score :{}".format[score.mean[]]]

2. Xác thực chéo K-Fold

Trong kỹ thuật xác nhận chéo gấp K, toàn bộ bộ dữ liệu được phân vùng thành các phần K có kích thước bằng nhau. Mỗi phân vùng được gọi là một nếp gấp. Một lần được sử dụng làm bộ xác thực và các nếp gấp K-1 còn lại được sử dụng làm bộ đào tạo.

Kỹ thuật được lặp lại k lần cho đến khi mỗi lần được sử dụng làm bộ xác thực và các nếp gấp còn lại như tập huấn luyện.

Độ chính xác cuối cùng của mô hình được tính toán bằng cách lấy độ chính xác trung bình của dữ liệu xác thực mô hình K.Introduction to Machine Learning in Python-O’REILLY

Pros:

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Nguồn hình ảnh: Scikit-learn.orgWorks perfectly well for Imbalanced Data: Each fold in stratified cross-validation will have a representation of data of all classes in the same ratio as in the whole dataset.

Cons:

1. Toàn bộ bộ dữ liệu được sử dụng làm cả tập huấn luyện và bộ xác thực:For Time Series data the order of the samples matter. But in Stratified Cross-Validation, samples are selected in random order.

1. Không được sử dụng cho các bộ dữ liệu mất cân bằng: như được thảo luận trong trường hợp xác thực chéo nắm giữ, trong trường hợp xác thực gấp K của lớp học 0 0. Và bộ xác thực sẽ có một mẫu lớp 1 1.

2. Không phù hợp với dữ liệu chuỗi thời gian: Đối với dữ liệu chuỗi thời gian, thứ tự của các mẫu có vấn đề. Nhưng trong xác nhận chéo K gấp K, các mẫu được chọn theo thứ tự ngẫu nhiên.

Giả sử chúng ta có 100 mẫu trong bộ dữ liệu. Nếu chúng ta sử dụng p = 10 thì trong mỗi lần lặp 10 giá trị sẽ được sử dụng làm bộ xác thực và 90 mẫu còn lại làm tập huấn luyện.

Quá trình này được lặp lại cho đến khi toàn bộ bộ dữ liệu được chia trên bộ xác thực của các mẫu P và mẫu đào tạo N-P.

Pros:

Tất cả các mẫu dữ liệu được sử dụng làm mẫu đào tạo và xác nhận.

Cons:

1. Thời gian tính toán cao: Vì kỹ thuật trên sẽ tiếp tục lặp lại cho đến khi tất cả các mẫu được sử dụng hết làm bộ xác thực, nó sẽ có thời gian tính toán cao hơn.As the above technique will keep on repeating until all samples get used up as a validation set, it will have higher computational time.

2. Không phù hợp với bộ dữ liệu mất cân bằng: Giống như trong xác thực chéo K gấp K, nếu trong tập huấn luyện, chúng tôi có các mẫu chỉ 1 lớp thì mô hình của chúng tôi sẽ không thể khái quát hóa cho tập xác thực.Same as in K-Fold Cross-validation, if in the training set we have samples of only 1 class then our model will not be able to generalize for the validation set.

Mã Python:

from sklearn.model_selection import LeavePOut,cross_val_score
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
iris=load_iris[]
X=iris.data
Y=iris.target
lpo=LeavePOut[p=2]
lpo.get_n_splits[X]
tree=RandomForestClassifier[n_estimators=10,max_depth=5,n_jobs=-1]
score=cross_val_score[tree,X,Y,cv=lpo]
print["Cross Validation Scores are {}".format[score]]
print["Average Cross Validation score :{}".format[score.mean[]]]

5. Để lại một xác thực chéo

Xác nhận chéo REBEONOUT là một kỹ thuật xác nhận chéo toàn diện trong đó 1 điểm mẫu được sử dụng làm bộ xác thực và các mẫu N-1 còn lại được sử dụng làm tập huấn luyện.

Giả sử chúng ta có 100 mẫu trong bộ dữ liệu. Sau đó, trong mỗi lần lặp 1 giá trị sẽ được sử dụng làm bộ xác thực và 99 mẫu còn lại làm tập huấn luyện. Do đó, quá trình được lặp lại cho đến khi mọi mẫu của bộ dữ liệu được sử dụng làm điểm xác thực.

Nó giống như xác nhận chéo retpout với p = 1.

Nguồn hình ảnh: & NBSP; www.towardsdatascience.com:  www.towardsdatascience.com

Mã trong Python:

from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import LeaveOneOut,cross_val_score
iris=load_iris[]
X=iris.data
Y=iris.target
loo=LeaveOneOut[]
tree=RandomForestClassifier[n_estimators=10,max_depth=5,n_jobs=-1]
score=cross_val_score[tree,X,Y,cv=loo]
print["Cross Validation Scores are {}".format[score]]
print["Average Cross Validation score :{}".format[score.mean[]]]

6. Xử lý chéo Monte Carlo [chia rẽ]

Xử lý chéo Monte Carlo, còn được gọi là xác thực chéo chia rẽ, là một chiến lược rất linh hoạt của xác thực chéo. Trong kỹ thuật này, các bộ dữ liệu được phân vùng ngẫu nhiên vào các bộ đào tạo và xác nhận.

Chúng tôi đã quyết định tỷ lệ phần trăm của bộ dữ liệu mà chúng tôi muốn được sử dụng làm bộ đào tạo và tỷ lệ phần trăm được sử dụng làm bộ xác thực. Nếu tỷ lệ phần trăm được thêm vào của kích thước tập huấn luyện và xác nhận không phải là tổng số lên tới 100 thì bộ dữ liệu còn lại không được sử dụng trong tập huấn luyện hoặc xác thực.

Hãy nói rằng chúng tôi có 100 mẫu và 60% mẫu được sử dụng làm bộ đào tạo và 20% mẫu được sử dụng làm bộ xác nhận sau đó 20% còn lại [100- [60+20]] không được sử dụng.

Sự phân tách này sẽ được lặp lại ‘NBSP; thời gian mà chúng ta phải chỉ định.

Nguồn hình ảnh: Giới thiệu về học máy ở Python-OIntroduction to Machine Learning in Python-O’REILLY

Pros:

1. Chúng tôi có thể tự do sử dụng kích thước của bộ đào tạo và xác nhận.

2. Chúng ta có thể chọn số lần lặp lại và không phụ thuộc vào số lượng nếp gấp để lặp lại.

Cons:

1. Một vài mẫu có thể không được chọn cho bộ đào tạo hoặc xác nhận.

2. Không phù hợp với các bộ dữ liệu mất cân bằng: Sau khi chúng tôi xác định kích thước của tập huấn luyện và bộ xác thực, tất cả các mẫu được chọn ngẫu nhiên, do đó có thể xảy ra rằng tập huấn luyện có thể không có lớp dữ liệu trong bài kiểm tra Đặt và mô hình sẽ không thể khái quát hóa dữ liệu chưa từng thấy.After we define the size of the training set and validation set, all the samples are randomly selected, so it may happen that the training set may don’t have the class of data that is in the test set, and the model won’t be able to generalize for unseen data.

Mã Python:

from sklearn.model_selection import ShuffleSplit,cross_val_score
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
logreg=LogisticRegression[]
shuffle_split=ShuffleSplit[test_size=0.3,train_size=0.5,n_splits=10]
scores=cross_val_score[logreg,iris.data,iris.target,cv=shuffle_split]
print["cross Validation scores:n {}".format[scores]]
print["Average Cross Validation score :{}".format[scores.mean[]]]

5. Để lại một xác thực chéo

Xác nhận chéo REBEONOUT là một kỹ thuật xác nhận chéo toàn diện trong đó 1 điểm mẫu được sử dụng làm bộ xác thực và các mẫu N-1 còn lại được sử dụng làm tập huấn luyện.

Giả sử chúng ta có 100 mẫu trong bộ dữ liệu. Sau đó, trong mỗi lần lặp 1 giá trị sẽ được sử dụng làm bộ xác thực và 99 mẫu còn lại làm tập huấn luyện. Do đó, quá trình được lặp lại cho đến khi mọi mẫu của bộ dữ liệu được sử dụng làm điểm xác thực.

Nó giống như xác nhận chéo retpout với p = 1.

Nguồn hình ảnh: & NBSP; www.towardsdatascience.com

Mã trong Python:

6. Xử lý chéo Monte Carlo [chia rẽ]

Xử lý chéo Monte Carlo, còn được gọi là xác thực chéo chia rẽ, là một chiến lược rất linh hoạt của xác thực chéo. Trong kỹ thuật này, các bộ dữ liệu được phân vùng ngẫu nhiên vào các bộ đào tạo và xác nhận.

Chúng tôi đã quyết định tỷ lệ phần trăm của bộ dữ liệu mà chúng tôi muốn được sử dụng làm bộ đào tạo và tỷ lệ phần trăm được sử dụng làm bộ xác thực. Nếu tỷ lệ phần trăm được thêm vào của kích thước tập huấn luyện và xác nhận không phải là tổng số lên tới 100 thì bộ dữ liệu còn lại không được sử dụng trong tập huấn luyện hoặc xác thực. www.r-bloggers.com

Pros:

Hãy nói rằng chúng tôi có 100 mẫu và 60% mẫu được sử dụng làm bộ đào tạo và 20% mẫu được sử dụng làm bộ xác nhận sau đó 20% còn lại [100- [60+20]] không được sử dụng.

Cons:

Sự phân tách này sẽ được lặp lại ‘NBSP; thời gian mà chúng ta phải chỉ định.As in other techniques we choose random samples as training or validation set, but in this technique order of data is very important.

Mã trong Python:

import numpy as np
from sklearn.model_selection import TimeSeriesSplit
X = np.array[[[1, 2], [3, 4], [1, 2], [3, 4], [1, 2], [3, 4]]]
y = np.array[[1, 2, 3, 4, 5, 6]]
time_series = TimeSeriesSplit[]
print[time_series]
for train_index, test_index in time_series.split[X]:
    print["TRAIN:", train_index, "TEST:", test_index]
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index]

Sự kết luận

Trong bài viết này, tôi đã cố gắng đưa ra một cái nhìn tổng quan về cách các kỹ thuật xác thực chéo khác nhau hoạt động và những điều chúng ta nên ghi nhớ để thực hiện các kỹ thuật. Tôi chân thành hy vọng sẽ giúp bạn một chút trong hành trình khoa học dữ liệu này.

Các phương tiện truyền thông được hiển thị trong bài viết này không thuộc sở hữu của Analytics Vidhya và được sử dụng theo quyết định của tác giả

Làm thế nào để bạn xác thực trong Python?

Dưới đây là các bước liên quan đến xác nhận chéo:..
Bạn đặt một bộ dữ liệu mẫu ..
Huấn luyện mô hình bằng phần còn lại của bộ dữ liệu ..
Sử dụng mẫu dự trữ của bộ kiểm tra [xác thực]. Điều này sẽ giúp bạn trong việc đo lường hiệu quả của hiệu suất mô hình của bạn ..

K là gì

Quy trình xác thực chéo K-Fold chia một bộ dữ liệu giới hạn thành các nếp gấp không chồng chéo K.Mỗi nếp gấp K được trao một cơ hội được sử dụng làm bộ kiểm tra lại, trong khi tất cả các nếp gấp khác được sử dụng như một bộ dữ liệu đào tạo.divides a limited dataset into k non-overlapping folds. Each of the k folds is given an opportunity to be used as a held-back test set, whilst all other folds collectively are used as a training dataset.

Cross là gì

Để đánh giá hiệu suất của một số mô hình trên bộ dữ liệu, chúng ta cần đo lường mức độ dự đoán của mô hình phù hợp với dữ liệu được quan sát.Cách phổ biến nhất để đo lường điều này là bằng cách sử dụng lỗi bình phương trung bình [MSE], được tính là: MSE = [1/n]*[Yi - F [xi]] 2.MSE = [1/n]*Σ[yi – f[xi]]2.

Làm cách nào để thiết lập chéo

xác thực chéo K-Fold..
Chọn một số nếp gấp - k.....
Chia bộ dữ liệu thành các phần k bằng nhau [nếu có thể] [chúng được gọi là nếp gấp].
Chọn K - 1 lần làm bộ đào tạo.....
Huấn luyện mô hình trên bộ đào tạo.....
Xác thực trên bộ kiểm tra ..
Lưu kết quả xác nhận ..
Lặp lại các bước 3 - 6 k lần ..

Bài Viết Liên Quan

Chủ Đề