【问题标题】:Convert categorical variables from String to int representation将分类变量从 String 转换为 int 表示
【发布时间】:2017-04-25 23:17:03
【问题描述】:

我有一个字符串数组形式的文本分类的numpy数组,即 y_train = ['A', 'B', 'A', 'C',...]。我正在尝试应用 SKlearn 多项式 NB 算法来预测整个数据集的类。

我想将 String 类转换为整数,以便能够输入算法并将['A', 'B', 'A', 'C', ...] 转换为['1', '2', '1', '3', ...]

我可以编写一个 for 循环来遍历数组并使用 int 分类器创建一个新的,但是是否有直接的函数来实现这一点

【问题讨论】:

    标签: pandas numpy scikit-learn


    【解决方案1】:

    试试factorize方法:

    In [264]: y_train = pd.Series(['A', 'B', 'A', 'C'])
    
    In [265]: y_train
    Out[265]:
    0    A
    1    B
    2    A
    3    C
    dtype: object
    
    In [266]: pd.factorize(y_train)
    Out[266]: (array([0, 1, 0, 2], dtype=int64), Index(['A', 'B', 'C'], dtype='object'))
    

    演示:

    In [271]: fct = pd.factorize(y_train)[0]+1
    
    In [272]: fct
    Out[272]: array([1, 2, 1, 3], dtype=int64)
    

    【讨论】:

      【解决方案2】:

      如果您使用的是 sklearn,我建议您坚持使用该库中为您执行这些操作的方法。 Sklearn 有多种预处理数据的方法,例如编码标签。其中之一是sklearn.preprocessing.LabelEncoder 函数。

      from sklearn.preprocessing import LabelEncoder  
      
      le = LabelEncoder()
      le.fit_transform(y_train)
      

      哪些输出

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

      使用le.inverse_transform([0,1,2]) 映射回来

      【讨论】:

        【解决方案3】:

        另一种方法是使用数据框的 astype('category').cat.codes 将字符串值转换为数字

        X=df[['User ID', 'Gender', 'Age', 'EstimatedSalary']]
        X['Gender']=X['Gender'].astype('category').cat.codes
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-04-14
          • 2021-10-23
          • 2020-03-12
          • 2023-04-03
          • 2012-08-15
          相关资源
          最近更新 更多