Gridsearchcv là gì

Số liệu mặc định cho KernelDensity minkowskivới p = 2 là số liệu aa euclid. GridSearchCV sẽ sử dụng số liệu KernelDensity để tính điểm nếu bạn không chỉ định bất kỳ phương pháp tính điểm nào khác.

Công thức cho lỗi bình phương trung bình là: sum [[y_true - y_estimated] ^ 2] / n. Bạn đã nhận lỗi vì bạn cần phải có một y_trueđể tính toán nó.

Đây là một ví dụ tổng thể về việc áp dụng GridSearchCV cho KernelDensity:

from sklearn.neighbors import KernelDensity from sklearn.grid_search import GridSearchCV import numpy as np N = 20 X = np.concatenate[[np.random.randint[0, 10, 50], np.random.randint[5, 10, 50]]][:, np.newaxis] params = {'bandwidth': np.logspace[-1.0, 1.0, 10]} grid = GridSearchCV[KernelDensity[], params] grid.fit[X] print[grid.grid_scores_] print['Best parameter: ',grid.best_params_] print['Best score: ',grid.best_score_] print['Best estimator: ',grid.best_estimator_]

và đầu ra là:

[mean: -96.94890, std: 100.60046, params: {'bandwidth': 0.10000000000000001}, mean: -70.44643, std: 40.44537, params: {'bandwidth': 0.16681005372000587}, mean: -71.75293, std: 18.97729, params: {'bandwidth': 0.27825594022071243}, mean: -77.83446, std: 11.24102, params: {'bandwidth': 0.46415888336127786}, mean: -78.65182, std: 8.72507, params: {'bandwidth': 0.774263682681127}, mean: -79.78828, std: 6.98582, params: {'bandwidth': 1.2915496650148841}, mean: -81.65532, std: 4.77806, params: {'bandwidth': 2.1544346900318834}, mean: -86.27481, std: 2.71635, params: {'bandwidth': 3.5938136638046259}, mean: -95.86093, std: 1.84887, params: {'bandwidth': 5.9948425031894086}, mean: -109.52306, std: 1.71232, params: {'bandwidth': 10.0}] Best parameter: {'bandwidth': 0.16681005372000587} Best score: -70.4464315885 Best estimator: KernelDensity[algorithm='auto', atol=0, bandwidth=0.16681005372000587, breadth_first=True, kernel='gaussian', leaf_size=40, metric='euclidean', metric_params=None, rtol=0]

Các phương pháp tính điểm hợp lệ cho GridSeachCV thường cần y_true. Trong trường hợp của bạn, bạn có thể muốn thay đổi các số liệu của sklearn.KernelDensitysố liệu khác [ví dụ để sklearn.metrics.pairwise.pairwise_kernels, sklearn.metrics.pairwise.pairwise_distances] như tìm kiếm lưới sẽ sử dụng chúng để ghi bàn.

Đầu tiên chúng ta sẽ cần import các packages cần thiết. Hầu hết các project machine learning đều yêu cầu sử dụng 4 packages chính là numpy, pandas [đọc, ghi và biến đổi dữ liệu], matplotlib [biểu đồ hoá] và đặc biệt là sklearn [xây dựng mô hình]. Để import các package chính thì chúng ta có thể sử dụng câu lệnh import package as alias, câu lệnh này sẽ import một package có tên là package và gán cho nó một cái tên ngắn gọn là alias trong toàn bộ file xử lý. Hoặc nếu chỉ muốn import một hàm hoặc class trong package thì bạn sử dụng câu lệnh from package.module import class_or_funct. Câu lệnh này sẽ import một class hoặc hàm số là class_or_funct bên trong package.module.

#from google.colab import drive #import os #drive.mount['/content/gdrive'] #os.chdir['gdrive/MyDrive/mybook'] import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt from sklearn.compose import ColumnTransformer from sklearn.naive_bayes import GaussianNB from sklearn.linear_model import LogisticRegression from sklearn.neighbors import KNeighborsClassifier from sklearn.svm import LinearSVC from sklearn.neural_network import MLPClassifier from sklearn.ensemble import GradientBoostingClassifier from sklearn.ensemble import RandomForestClassifier from sklearn.impute import KNNImputer, SimpleImputer from sklearn.metrics import accuracy_score from sklearn.model_selection import train_test_split from sklearn.pipeline import Pipeline from sklearn.model_selection import cross_val_score from sklearn.metrics import fbeta_score from sklearn.metrics import make_scorer from sklearn.model_selection import cross_val_score from sklearn.model_selection import RepeatedStratifiedKFold from sklearn.preprocessing import OneHotEncoder, MinMaxScaler

German credit là bộ dữ liệu về lịch sử tín dụng của 1000 tài khoản khác nhau. Mục tiêu của chúng ta là dựa vào lịch sử tín dụng này để dự đoán khả năng khách hàng sẽ trả nợ hay không. Bộ dữ liệu bao gồm 20 biến đầu vào trong đó có 7 biến liên tục [numeric] và 13 biến phân loại [category]. Nội dung của các biến từ 1 đến 20 lần lượt như sau:

  • Trạng thái tài khoản hiện có.

  • Kỳ hạn theo tháng [Duration]

  • Lịch sử tín dụng

  • Mục đích

  • Dư nợ tín dụng [Credit amount]

  • Tài khoản tiết kiệm [Savings account]

  • Số năm làm việc liên tục gần nhất tới thời điểm hiện tại

  • Tỷ lệ trả góp [Installment rate] theo thu nhập khả dụng

  • Giới tính và trạng thái hôn nhân

  • Những người nợ khác

  • Thời gian cư trú tại nơi ở hiện tại

  • Bất động sản

  • Tuổi

  • Trả góp khác

  • Nhà ở

  • Số lượng khoản vay tại ngân hàng

  • Nghề nghiệp

  • Số người phụ thuộc

  • Điện thoại

  • Có phải là lao động nước ngoài

Biến mục tiêu [cột response ở vị trí cuối cùng] có giá trị 1 cho khách hàng Good và 2 cho khách hàng Bad. Khách hàng Good là khác hàng vỡ nợ và chúng ta còn gọi là Negative Class trong khi khách hàng Bad là trường hợp ngược lại và là Positive class.

Đây là bộ dữ liệu mất cân bằng khi nhãn Good [Negative] chiếm 70% và nhãn Bad chỉ 30% [Positive]. Tiếp theo ta sẽ đọc vào khảo sát bộ dữ liệu này.

import pandas as pd df = pd.read_csv["//archive.ics.uci.edu/ml/machine-learning-databases/statlog/german/german.data", header=None, names=['StaAcc', 'DuMon', 'CredHis', 'Purpose', 'CredAmt', 'SavAcc', \ 'PreEmpl', 'InsRt', 'PerSta', 'OthDebtor', 'PreRe', 'Property', \ 'Age', 'IntPla', 'Housing', 'ExstCredit', 'Job', 'NoMain', 'Phone', 'ForWorker', "Response"], index_col=None, sep=" "] df.head[]

StaAcc DuMon CredHis Purpose CredAmt SavAcc PreEmpl InsRt PerSta OthDebtor ... Property Age IntPla Housing ExstCredit Job NoMain Phone ForWorker Response 0 1 2 3 4
A11 6 A34 A43 1169 A65 A75 4 A93 A101 ... A121 67 A143 A152 2 A173 1 A192 A201 1
A12 48 A32 A43 5951 A61 A73 2 A92 A101 ... A121 22 A143 A152 1 A173 1 A191 A201 2
A14 12 A34 A46 2096 A61 A74 2 A93 A101 ... A121 49 A143 A152 1 A172 2 A191 A201 1
A11 42 A32 A42 7882 A61 A74 2 A93 A103 ... A122 45 A143 A153 1 A173 2 A191 A201 1
A11 24 A33 A40 4870 A61 A73 3 A93 A101 ... A124 53 A143 A153 2 A173 2 A191 A201 2

5 rows × 21 columns

Các trường dữ liệu và định dạng

RangeIndex: 1000 entries, 0 to 999 Data columns [total 21 columns]: # Column Non-Null Count Dtype --- ------ -------------- ----- 0 StaAcc 1000 non-null object 1 DuMon 1000 non-null int64 2 CredHis 1000 non-null object 3 Purpose 1000 non-null object 4 CredAmt 1000 non-null int64 5 SavAcc 1000 non-null object 6 PreEmpl 1000 non-null object 7 InsRt 1000 non-null int64 8 PerSta 1000 non-null object 9 OthDebtor 1000 non-null object 10 PreRe 1000 non-null int64 11 Property 1000 non-null object 12 Age 1000 non-null int64 13 IntPla 1000 non-null object 14 Housing 1000 non-null object 15 ExstCredit 1000 non-null int64 16 Job 1000 non-null object 17 NoMain 1000 non-null int64 18 Phone 1000 non-null object 19 ForWorker 1000 non-null object 20 Response 1000 non-null int64 dtypes: int64[8], object[13] memory usage: 164.2+ KB

Đây là bộ dữ liệu có chất lượng khá tốt, không có missing value ở các biến.

Thống kê mô tả

DuMon CredAmt InsRt PreRe Age ExstCredit NoMain Response count mean std min 25% 50% 75% max
1000.000000 1000.000000 1000.000000 1000.000000 1000.000000 1000.000000 1000.000000 1000.000000
20.903000 3271.258000 2.973000 2.845000 35.546000 1.407000 1.155000 1.300000
12.058814 2822.736876 1.118715 1.103718 11.375469 0.577654 0.362086 0.458487
4.000000 250.000000 1.000000 1.000000 19.000000 1.000000 1.000000 1.000000
12.000000 1365.500000 2.000000 2.000000 27.000000 1.000000 1.000000 1.000000
18.000000 2319.500000 3.000000 3.000000 33.000000 1.000000 1.000000 1.000000
24.000000 3972.250000 4.000000 4.000000 42.000000 2.000000 1.000000 2.000000
72.000000 18424.000000 4.000000 4.000000 75.000000 4.000000 2.000000 2.000000

Kết quả thống kê mô tả sơ bộ trên các biến numeric cho thấy các biến khác biệt nhau về đơn vị lớn. Trung bình thấp nhất là 1.155 và cao nhất lên tới 3271.258. Như vậy khả năng cao chúng ta sẽ cần phải chuẩn hoá các biến để loại bỏ sự khác biệt về đơn vị trước khi xây dựng mô hình.

Phân phối của các biến

Chúng ta không nên tin tưởng hoàn toàn vào thống kê mô tả mà cần nhìn trực tiếp vào hình dạng phân phối của các biến. Điều này nhằm tránh những sai sót khi đánh giá về tính chất của biến khi chúng khác biệt xa nhau về phân phối. Điều này đã được giải thích trong ví dụ phân phối chú khủng long.

Chúng ta có thể dùng biểu đồ density kết hợp với histogram để tìm ra phân phối của biến.

Đối với biến liên tục.

import seaborn as sns import warnings warnings.simplefilter[action='ignore', category=FutureWarning] numeric_cols = df.select_dtypes[include=['float','int']].columns def _plot_numeric_classes[df, col, bins=10, hist=True, kde=True]: sns.distplot[df[col], bins = bins, hist = hist, kde = kde] def _distribution_numeric[df, numeric_cols, row=3, col=3, figsize=[20, 15], bins = 10]: ''' numeric_cols: list các tên cột row: số lượng dòng trong lưới đồ thị col: số lượng cột trong lưới đồ thị figsize: kích thước biểu đồ bins: số lượng bins phân chia trong biểu đồ distribution ''' print['number of numeric field: ', len[numeric_cols]] assert row*[col-1]

Chủ Đề