簡體   English   中英

用於機器學習的 train-est 拆分中的列不同 model Python

[英]Not same columns in train-est split for machine learning model Python

我正在訓練機器學習 model 以預測建築價格。

其中一列是建築物所在的城市。 我有很多城市

Unincorporated County    244550
Miami                     91486
Miami Beach               39880
Hialeah                   35439
Doral                     20118
Miami Gardens             18031
Aventura                  18011
Homestead                 16472
Sunny Isles Beach         13587
Coral Gables              13365
North Miami               10843
Cutler Bay                10734
North Miami Beach          9592
Miami Lakes                6986
Palmetto Bay               6039
Key Biscayne               5170
Pinecrest                  4575
Hialeah Gardens            4295
South Miami                2864
Sweetwater                 2811
Bal Harbour                2794
North Bay Village          2767
Miami Shores               2764
Miami Springs              2689
Opa-locka                  2632
Surfside                   2401
Bay Harbor Islands         2031
Florida City               1924
West Miami                  921
Biscayne Park               717
Medley                      708
El Portal                   522
Virginia Gardens            370
Golden Beach                283
Indian Creek                 24

在這里您可以看到列城市的 value_counts(),據我所知,有足夠的示例可以將其包含到 model 中。

當我想將 model 拆分為 x_train 和 x_test 或進行 cross_validation 時,問題就來了。 當我使用以下方法拆分數據集時:

X_train, X_test, y_train, y_test = train_test_split(
    df_x, df_y,
    test_size=0.33, random_state=180
)

或者我做一個交叉驗證:

score2 = cross_validate(estimator_pipeline, X= df_x, y= df_y, 
scoring=scoring,return_train_score=False, cv=5,n_jobs=2)

我收到此錯誤:

Found unknown categories ['El Portal', 'Florida city, 'Medley'] in column 1 during transform

據我了解,該錯誤是一個熱編碼器的問題,因為獲取列城市的每個值並為每個城市創建一個新列,但是當它在 x_train 和 x_test 之間拆分時,它會在一個熱之前執行編碼器,然后在火車的分區中采取一些城市,但在測試分區中不采取同一個城市。

我應該在分區之前做一個熱編碼器還是 pd.get_dummies() ,還是有更好的方法來分割數據集以將城市與火車和測試分區中的相同城市?

對於這些情況,當您對分類變量進行 OneHot 編碼時,您希望設置handle_unknown='ignore' ,以便忽略測試集中未見的實例,並且 output 矩陣具有相同的形狀。

這是一個簡單的例子:

from sklearn.preprocessing import OneHotEncoder

X_train = pd.Series(['West Miami', 'Biscayne Park', 'Medley'])
oh = OneHotEncoder(handle_unknown='ignore')
oh.fit(X_train.values[:,None])

oh.transform(X_train.values[:,None]).toarray()

array([[0., 0., 1.],
       [1., 0., 0.],
       [0., 1., 0.]])

如果我們用一個看不見的城市轉換下面的測試集,得到的矩陣的形狀保持不變:

X_test = pd.Series(['West Miami', 'Biscayne Park', 'Atlanta'])

oh.transform(X_test.values[:,None]).toarray()

array([[0., 0., 1.],
       [1., 0., 0.],
       [0., 0., 0.]])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM