Mã python xác thực chéo k lần phân tầng

Chương trình python này thể hiện phân loại hình ảnh với kỹ thuật xác thực chéo k-fold phân tầng. Các thư viện cần có là máy ảnh, sklearn và tensorflow

  • ĐS. zip chứa tập dữ liệu mẫu mà tôi đã thu thập từ Kaggle. com. Nó bao gồm ba thư mục [Train, Test và Validation] và mỗi thư mục trong số ba thư mục này bao gồm các thư mục theo nhãn lớp [e. g. , hình tròn, hình tam giác và hình vuông]

  • Kiểm tra mã trong stratified_K_fold_CV. máy tính xách tay ipynb

  • Thay đổi kích thước lô, kỷ nguyên và cấu trúc của mô hình CNN theo nhu cầu của bạn. Ở đây, một số giá trị ngây thơ được cung cấp mà không có bất kỳ điều chỉnh siêu tham số nào

  • Thay đổi nội dung của thư mục DS theo tập dữ liệu/hình ảnh của bạn. Nhưng ban đầu hãy giữ tất cả các hình ảnh bên trong các thư mục con của thư mục "tàu". Chương trình sẽ đảm nhận việc tách các hình ảnh thử nghiệm và hình ảnh xác thực bên trong mã. Ngoài ra, đừng quên đổi tên các thư mục con của bạn bên trong thư mục đào tạo, kiểm tra và xác thực theo các lớp học của bạn

  • Vui lòng xem bài báo sau nơi tôi đã sử dụng một cách tiếp cận tương tự. https. //www. cổng nghiên cứu. net/publication/344343833_DL-CRC_Deep_Learning-based_Chest_Radiograph_Classification_for_COVID-19_Detection_A_Novel_Approach

    Kỹ thuật xác thực được sử dụng nhiều nhất là Xác thực chéo K-Fold liên quan đến việc chia tập dữ liệu huấn luyện thành k nếp gấp. Các nếp gấp k-1 đầu tiên được sử dụng để đào tạo và nếp gấp còn lại được giữ để kiểm tra, quá trình này được lặp lại cho các nếp gấp K. Tổng số K nếp gấp phù hợp và được đánh giá, đồng thời trả về độ chính xác trung bình cho tất cả các nếp gấp này

    • Bởi Vijaysinh Lendave

    Bất cứ khi nào chúng tôi thực hiện một nhiệm vụ phân loại, cho dù đó là phân loại nhị phân hay đa lớp, chúng tôi đều tuân theo cách tiếp cận - xử lý trước dữ liệu, chia nó thành đào tạo và kiểm tra bởi lớp train_test_split của thư viện scikit-learning, sau đó sau khi đào tạo mô hình của bạn, bạn sẽ . Hôm nay trong bài viết này, chúng ta sẽ xem cách Stratified K Fold và các chỉ số hiệu suất khác nhau có thể giúp chúng ta xây dựng một cỗ máy mạnh mẽ, mô hình dựa trên học tập.   

    Bạn có thể đã quan sát thấy rằng khi bạn thay đổi Random_state bên trong lớp train_test_split, độ chính xác của mô hình sẽ thay đổi và điều này sẽ thay đổi thành bất kỳ giá trị nào của Random_state do thực tế là chúng ta không thể quan sát độ chính xác của mô hình. Đúng như tên gọi của nó, nó lấy mẫu dữ liệu mà không quan tâm đến việc phân phối các lớp. Giả sử bạn đang xử lý phân loại nhị phân trong số 100% tập dữ liệu, 70% thuộc về lớp 0 và phần còn lại thuộc về lớp 1; . Bằng cách xé một tập dữ liệu như vậy, bạn sẽ nhận được độ chính xác kém.     

    Kỹ thuật xác thực được sử dụng nhiều nhất là Xác thực chéo K-Fold liên quan đến việc chia tập dữ liệu huấn luyện thành k nếp gấp. Các nếp gấp k-1 đầu tiên được sử dụng để đào tạo và nếp gấp còn lại được giữ để kiểm tra, quá trình này được lặp lại cho các nếp gấp K. Tổng số K nếp gấp phù hợp và được đánh giá, đồng thời trả về độ chính xác trung bình cho tất cả các nếp gấp này. Quá trình này đã cho thấy một kết quả lạc quan đối với các nhiệm vụ phân loại cân bằng, nhưng nó không thành công đối với các lớp mất cân bằng. Điều này là do xác thực chéo, cũng phân chia dữ liệu một cách ngẫu nhiên mà không quan tâm đến sự mất cân bằng của lớp.     

    TUYỆT VỜI

    Đăng ký hàng tuần của bạn về những gì đang xảy ra trong công nghệ mới nổi

    E-mail

    Đăng ký

    Vì vậy, giải pháp là không chia dữ liệu một cách ngẫu nhiên mà nên chia theo cách phân tầng. Xác thực chéo k lần phân tầng là một phần mở rộng của kỹ thuật xác thực chéo được sử dụng cho các vấn đề phân loại. Nó duy trì tỷ lệ lớp giống nhau trong suốt K nếp gấp như tỷ lệ trong tập dữ liệu gốc. Vì vậy, ví dụ, bạn đang xử lý dự đoán bệnh tiểu đường trong đó bạn có tỷ lệ lớp là 70/30; .    

    Tiếp theo trong bài viết, chúng tôi sẽ triển khai xác thực chéo K-Fold phân tầng và phân tích tầm quan trọng của nó đối với một số tham số. Mã python dưới đây cho thấy cách một người có thể sử dụng Xác thực chéo K Fold phân tầng cho một vấn đề phân loại, sau khi đào tạo trình phân loại của chúng tôi, hiệu suất tương tự sẽ được đánh giá theo các chỉ số sau. -

    • Ma trận hỗn loạn
    • Đường cong ROC AUC
    • Điểm F-1
    • Điểm Brier

    Triển khai Xác thực chéo K-fold phân tầng trong Python

    Bây giờ chúng ta hãy xem triển khai thực tế của Stratified K fold. Ở đây, bộ dữ liệu chúng tôi đang nghiên cứu cho chúng tôi biết liệu bệnh nhân cụ thể có mắc bệnh tiểu đường hay không dựa trên bảy tính năng đầu vào.  

    Chúng tôi sẽ xác định chiến lược gấp 10 lần trong lớp Stratified K-fold, đây là gói scikit-learning sẽ duy trì tỷ lệ lớp

    Hãy bắt đầu bằng cách nhập tất cả các phụ thuộc;

    import pandas as pd
    from sklearn.model_selection import StratifiedKFold
    from sklearn.linear_model import LogisticRegression

    Tải và xem tập dữ liệu;

    dataset = pd.read_csv['/content/diabetes.csv']
    dataset.head[10]

    Trước khi tiếp tục, hãy kiểm tra sự phân bổ lớp học;

    dataset = pd.read_csv['/content/diabetes.csv']
    dataset.head[10]
    0

    Vì vậy, trong số 100% dữ liệu, 35% bệnh nhân đã được xét nghiệm dương tính với bệnh tiểu đường, nghĩa là chúng tôi có tỷ lệ 35/65.     

    Để sử dụng cùng một tỷ lệ trong suốt 10 nếp gấp bên dưới, chúng tôi khởi tạo lớp nếp gấp K được phân tầng, trả về 10 nếp gấp với cùng một tỷ lệ phân phối lớp.   

    dataset = pd.read_csv['/content/diabetes.csv']
    dataset.head[10]
    0

    Bây giờ ở đây, chúng tôi đang sử dụng hồi quy Logistic với bộ giải là newton-cg để tránh mọi vấn đề về hội tụ và tách biến mục tiêu và tập dữ liệu như bên dưới;

    model = LogisticRegression[solver='newton-cg']
    x = dataset
    y = dataset.Outcome

    Hàm do người dùng xác định bên dưới được sử dụng để làm trơn tru quá trình đào tạo để chúng ta cần đào tạo mô hình theo cách thủ công nhiều lần;

    def training[train, test, fold_no]:
      x_train = train.drop[['Outcome'],axis=1]
      y_train = train.Outcome
      x_test = test.drop[['Outcome'],axis=1]
      y_test = test.Outcome
      model.fit[x_train, y_train]
      score = model.score[x_test,y_test]
      print['For Fold {} the accuracy is {}'.format[str[fold_no],score]]

    Hãy thử mã hoàn chỉnh cùng nhau;

    dataset = pd.read_csv['/content/diabetes.csv']
    skf = StratifiedKFold[n_splits=10]
    model = LogisticRegression[solver='newton-cg']
    x = dataset
    y = dataset.Outcome
    
    def training[train, test, fold_no]:
      x_train = train.drop[['Outcome'],axis=1]
      y_train = train.Outcome
      x_test = test.drop[['Outcome'],axis=1]
      y_test = test.Outcome
      model.fit[x_train, y_train]
      score = model.score[x_test,y_test]
      print['For Fold {} the accuracy is {}'.format[str[fold_no],score]]
    
    fold_no = 1
    for train_index,test_index in skf.split[x, y]:
      train = dataset.iloc[train_index,:]
      test = dataset.iloc[test_index,:]
      training[train, test, fold_no]
      fold_no += 1

    Chúng tôi có một mô hình khá mạnh mẽ được huấn luyện trên 10 nếp gấp và đã cho độ chính xác trung bình gần 78%. Bây giờ chúng ta không nên coi đây là mô hình cuối cùng. Bởi vì cho đến nay, chúng tôi chỉ tập trung vào độ chính xác tổng thể, đây không phải là thước đo chính xác cho mô hình. Mô hình này nên được đánh giá dựa trên các số liệu hiệu suất khác nhau để đảm bảo tính mạnh mẽ của mô hình.

    Bây giờ khi chúng tôi đã đào tạo trình phân loại của mình trên các nếp gấp khác nhau, như đã đề cập trước đó, chúng tôi sẽ kiểm tra hiệu suất của mô hình với dữ liệu thử nghiệm và chúng tôi sẽ cố gắng hiểu tất cả các ma trận bên dưới quan trọng như thế nào đối với các vấn đề phân loại.    

    Ma trận hỗn loạn.  

    Đây là phép đo hiệu suất cho mô hình ML dành riêng cho các vấn đề phân loại trong đó đầu ra có thể là hai hoặc nhiều lớp. Vì vậy, về cơ bản, nó là một bảng gồm bốn kết hợp khác nhau của các giá trị dự đoán và thực tế. Nó cực kỳ hữu ích để đo Thu hồi, Độ chính xác, Độ đặc hiệu, Độ chính xác và quan trọng nhất là các đường cong như ROC AUC.     

    Hãy vẽ ma trận nhầm lẫn cho mô hình của chúng ta;

    from sklearn.metrics import plot_confusion_matrix
    plot_confusion_matrix[model, X_train,y_train]

    Đường cong ROC AUC.

    Đường cong ROC được gọi là Đường cong đặc tính hoạt động của máy thu; . AUC được gọi là Khu vực dưới đường cong. Trong đó trục X biểu thị Tỷ lệ dương sai và trục Y biểu thị Tỷ lệ dương thực. Biểu đồ này cung cấp thông tin về cách mô hình dự đoán phân loại đúng và phân loại sai

    Hãy xem đường cong ROC của mô hình của chúng tôi;

    from sklearn.metrics import plot_roc_curve
    plot_roc_curve[model, X_train,y_train ]

    Điểm F1.

    Điểm F, thước đo F hoặc điểm F1 là thước đo độ chính xác của bài kiểm tra và được tính bằng giá trị trung bình có trọng số của Độ chính xác và Thu hồi. Giá trị của nó thay đổi trong khoảng từ 0 đến 1 và giá trị tốt nhất là 1

    ________số 8

    Đối với mô hình của chúng tôi, điểm F1 là 0. 63 đó là một số điểm khá

    Điểm Brier

    Điểm Brier tính toán lỗi bình phương trung bình giữa xác suất dự đoán và giá trị dự kiến. Do đó, điểm số tóm tắt mức độ lỗi trong dự báo xác suất. Điểm lỗi luôn nằm trong khoảng từ 0 đến 1. Do đó, những người có bộ kỹ năng hoàn hảo sẽ có điểm lỗi là 0.    

    Hãy kiểm tra điểm Brier cho mô hình của chúng ta;

    from sklearn.metrics import brier_score_loss
    probs = model.predict_proba[X_test]
    #  keeping the prediction for class 1
    probs = probs[:,1] 
    print['Brier loss: ', brier_score_loss[y_test,probs]]

    đầu ra. mất mát. 0. 17

    Mô hình của chúng tôi có Điểm Brier tốt

    Sự kết luận

    Trong bài viết này, chúng ta đã thấy các phương thức phổ biến như sử dụng lớp train_test_split[] có thể làm sai lệch hiệu suất của mô hình khi thực hiện nhiệm vụ phân loại mất cân bằng. Để giải quyết vấn đề này, chúng tôi đã thấy trường hợp sử dụng thực tế của xác thực chéo nếp gấp K phân tầng, phân tách các nếp gấp K bằng cách giữ nguyên tỷ lệ lớp như trong tập dữ liệu gốc, đối với tập dữ liệu phân tầng mới mà chúng tôi đã đào tạo trình phân loại của mình. Sau đó, chúng tôi đã đánh giá trình phân loại của mình với sự trợ giúp của các chỉ số hiệu suất.   

    Người giới thiệu

    • Sklearn Stratified K gấp
    • Số liệu hiệu suất của Sklearn
    • Tìm hiểu thêm về việc sử dụng các chỉ số hiệu suất
    • Liên kết cho các mã trên
    • Tập dữ liệu được sử dụng

    Nhiều câu chuyện AIM tuyệt vời hơn

    Cách Zoho tận dụng AI để viết nên một câu chuyện thành công độc đáo

    ChatGPT 'Tốt hơn 100 lần' có thực sự là Kẻ giết người của Google không?

    5 công ty cung cấp nền tảng công nghệ vũ trụ để thúc đẩy đổi mới

    8 Fullstack Framework Mọi Developer Phải Nắm vững

    Tại sao chúng tôi ngừng xây dựng ngôn ngữ lập trình mới

    Vijaysinh là một người đam mê học máy và học sâu. Anh ấy có kỹ năng về các thuật toán ML, thao tác dữ liệu, xử lý và trực quan hóa, xây dựng mô hình

    phân tầng là gì k

    Trình xác thực chéo K-Fold phân tầng. Cung cấp các chỉ số huấn luyện/kiểm tra để phân chia dữ liệu trong các tập huấn luyện/kiểm tra . Đối tượng xác thực chéo này là một biến thể của KFold trả về các nếp gấp được phân tầng. Các nếp gấp được thực hiện bằng cách bảo toàn tỷ lệ mẫu cho mỗi lớp. Đọc thêm trong Hướng dẫn sử dụng.

    phân tầng trong chéo là gì

    phân tầng. Việc chia dữ liệu thành các phần có thể được điều chỉnh bởi các tiêu chí như đảm bảo rằng mỗi phần có cùng tỷ lệ quan sát với một giá trị phân loại nhất định, chẳng hạn như giá trị kết quả của lớp. Điều này được gọi là xác thực chéo phân tầng

    Sự khác biệt giữa KFold và KFold phân tầng là gì?

    Trước tiên, bạn cần biết "KFold" và "Stratified" là gì. KFold là trình xác thực chéo chia tập dữ liệu thành k phần. Phân tầng là để đảm bảo rằng mỗi phần của tập dữ liệu có cùng tỷ lệ quan sát với một nhãn nhất định .

    Chúng ta có thể sử dụng nếp gấp K phân tầng để hồi quy không?

    Bộ dữ liệu chứa mười biến số tuổi, giới tính, chỉ số khối cơ thể, huyết áp trung bình và sáu lần đo huyết thanh [s1-s6] bệnh nhân tiểu đường và một phép đo định lượng tiến triển bệnh một năm sau đường cơ sở là mục tiêu mà chúng tôi quan tâm để dự đoán

Chủ Đề