日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

8.Using Categorical Data with One Hot Encoding

發布時間:2023/12/10 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 8.Using Categorical Data with One Hot Encoding 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本教程是機器學習系列的一部分。 在此步驟中,您將了解“分類”變量是什么,以及處理此類數據的最常用方法。

Introduction

分類數據是僅采用有限數量值的數據。

例如,如果人們回答一項關于他們擁有哪種品牌汽車的調查,結果將是明確的(因為答案將是本田,豐田,福特,無等等)。 答案屬于一組固定的類別。

如果您嘗試將這些變量插入Python中的大多數機器學習模型而不首先“編碼”它們,則會出現錯誤。 在這里,我們將展示最流行的分類變量編碼方法。

One-Hot Encoding : The Standard Approach for Categorical Data

One-Hot Encoding是最普遍的方法,除非你的分類變量具有大量的值,否則它的效果非常好(例如,對于變量超過15個不同值的變量,你通常不會這樣做。在數值較少的情況下它是一個糟糕的選擇,盡管情況有所不同。)

One-Hot Encoding創建新的(二進制)列,指示原始數據中每個可能值的存在。 讓我們通過一個例子來解決。

原始數據中的值為紅色,黃色和綠色。 我們為每個可能的值創建一個單獨的列。 只要原始值為紅色,我們在紅色列中放置1。

Example

我們在代碼中看到這個。 我們將跳過基本數據設置代碼,因此您可以從擁有train_predictors,test_predictors 的DataFrames位置開始。 該數據包含住房特征。 您將使用它們來預測房屋價格,房屋價格存儲在稱為目標的系列中。

【1】

# Read the data import pandas as pd train_data = pd.read_csv('../input/train.csv') test_data = pd.read_csv('../input/test.csv')# Drop houses where the target is missing train_data.dropna(axis=0, subset=['SalePrice'], inplace=True)target = train_data.SalePrice# Since missing values isn't the focus of this tutorial, we use the simplest # possible approach, which drops these columns. # For more detail (and a better approach) to missing values, see # https://www.kaggle.com/dansbecker/handling-missing-values cols_with_missing = [col for col in train_data.columns if train_data[col].isnull().any()] candidate_train_predictors = train_data.drop(['Id', 'SalePrice'] + cols_with_missing, axis=1) candidate_test_predictors = test_data.drop(['Id'] + cols_with_missing, axis=1)# "cardinality" means the number of unique values in a column. # We use it as our only way to select categorical columns here. This is convenient, though # a little arbitrary. low_cardinality_cols = [cname for cname in candidate_train_predictors.columns if candidate_train_predictors[cname].nunique() < 10 andcandidate_train_predictors[cname].dtype == "object"] numeric_cols = [cname for cname in candidate_train_predictors.columns if candidate_train_predictors[cname].dtype in ['int64', 'float64']] my_cols = low_cardinality_cols + numeric_cols train_predictors = candidate_train_predictors[my_cols] test_predictors = candidate_test_predictors[my_cols]

Pandas為每個列或系列分配數據類型(稱為dtype)。 讓我們從預測數據中看到隨機的dtypes樣本:

【2】

train_predictors.dtypes.sample(10) Heating object CentralAir object Foundation object Condition1 object YrSold int64 PavedDrive object RoofMatl object PoolArea int64 EnclosedPorch int64 KitchenAbvGr int64 dtype: object

對象表示一列有文本(理論上可能有其他東西,但這對我們的目的來說并不重要)。 對這些“對象”列進行one-hot encode是最常見的,因為它們不能直接插入大多數模型中。 Pandas提供了一個名為get_dummies的便捷功能,可以獲得one-hot encodings。 這樣叫:

[3]

one_hot_encoded_training_predictors = pd.get_dummies(train_predictors)

或者,您可以刪除分類。 為了了解這些方法的比較,我們可以計算兩組可選預測構建的模型的平均絕對誤差:

  • ???? One-hot encoded分類以及數字預測變量
  • ???? 數值預測,我們刪除分類。
  • One-hot encoding通常有所幫助,但它會根據具體情況而有所不同。 在這種情況下,使用one-hot encoded變量似乎沒有任何的好處。

    ?

    [4]

    from sklearn.model_selection import cross_val_score from sklearn.ensemble import RandomForestRegressordef get_mae(X, y):# multiple by -1 to make positive MAE score instead of neg value returned as sklearn conventionreturn -1 * cross_val_score(RandomForestRegressor(50), X, y, scoring = 'neg_mean_absolute_error').mean()predictors_without_categoricals = train_predictors.select_dtypes(exclude=['object'])mae_without_categoricals = get_mae(predictors_without_categoricals, target)mae_one_hot_encoded = get_mae(one_hot_encoded_training_predictors, target)print('Mean Absolute Error when Dropping Categoricals: ' + str(int(mae_without_categoricals))) print('Mean Abslute Error with One-Hot Encoding: ' + str(int(mae_one_hot_encoded))) Mean Absolute Error when Dropping Categoricals: 18350 Mean Abslute Error with One-Hot Encoding: 18023

    Applying to Multiple Files

    到目前為止,您已經對您的訓練數據進行了one-hot encoded。 當你有多個文件(例如測試數據集,或者你想要預測的其他數據)時怎么辦? Scikit-learn對列的排序很敏感,因此如果訓練數據集和測試數據集未對齊,則結果將是無意義的。 如果分類在訓練數據中與測試數據具有不同數量的值,則可能發生這種情況。

    使用align命令確保測試數據的編碼方式與訓練數據相同:

    【5】

    one_hot_encoded_training_predictors = pd.get_dummies(train_predictors) one_hot_encoded_test_predictors = pd.get_dummies(test_predictors) final_train, final_test = one_hot_encoded_training_predictors.align(one_hot_encoded_test_predictors,join='left', axis=1)

    align命令確保列在兩個數據集中以相同的順序顯示(它使用列名來標識每個數據集中的哪些列對齊。)參數join ='left'指定我們將執行等效的SQL左連接。 這意味著,如果有一列顯示在一個數據集而不是另一個數據集中,我們將保留我們的訓練數據中的列。 參數join ='inner'將執行SQL數據庫調用內連接的操作,僅保留兩個數據集中顯示的列。 這也是一個明智的選擇。

    Conclusion

    世界充滿了分類數據。 如果您知道如何使用這些數據,那么您將成為一名更有效的數據科學家。 當您開始使用cateogircal數據進行更復雜的工作時,這些資源將非常有用。

  • ???? 管道:將模型部署到生產就緒系統本身就是一個主題。 雖然one-hot encoding仍然是一種很好的方法,但您的代碼需要以特別強大的方式構建。 Scikit-learn管道是一個很好的工具。 Scikit-learn提供了class for one-hot encoding,可以將其添加到管道中。 不幸的是,它不處理文本或對象值,這是一個常見的用例。
  • ???? 應用于深度學習的文本:Keras和TensorFlow具有one-hot encoding的功能,這對于處理文本很有用。
  • ? ? ?具有多個值的分類:Scikit-learn的FeatureHasher使用散列技巧來存儲高維數據。 這將為您的建模代碼增加一些復雜性。
  • Your Turn

    使用one-hot encoding允許課程項目中的分類。 然后在X數據中添加一些分類列。 如果選擇正確的變量,您的模型將會有相當大的改進。 完成后,單擊此處返回學習機器學習,您可以繼續改進模型。

    總結

    以上是生活随笔為你收集整理的8.Using Categorical Data with One Hot Encoding的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。