Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何对分类数据进行编码而不影响数据帧中的数字数据?_Python_Machine Learning_Scikit Learn - Fatal编程技术网

Python 如何对分类数据进行编码而不影响数据帧中的数字数据?

Python 如何对分类数据进行编码而不影响数据帧中的数字数据?,python,machine-learning,scikit-learn,Python,Machine Learning,Scikit Learn,如何对“性别”、“已婚”、“教育”栏目进行编码而不影响 “贷款ID”、“受抚养人”、“申请者”列 这应该能解决你的问题 Loan_ID Gender Married Dependents Education ApplicantIncome 1 LP001003 Male Yes 1 Graduate 4583 2 LP001005 Male Yes 0 Graduate

如何对“性别”、“已婚”、“教育”栏目进行编码而不影响 “贷款ID”、“受抚养人”、“申请者”列


这应该能解决你的问题

     Loan_ID    Gender  Married Dependents  Education   ApplicantIncome
1   LP001003    Male     Yes        1       Graduate       4583
2   LP001005    Male     Yes        0       Graduate       3000
3   LP001006    Male     Yes        0       Not Graduate   2583
4   LP001008    Male     No         0       Graduate       6000
5   LP001011    Male     Yes        2       Graduate       5417
我更喜欢使用方法,因此:

from sklearn.preprocessing import LabelEncoder

le = LabelEncoder()

for cat_var in ['Gender', 'Married', 'Education']:
    df[cat_var] = le.fit_transform(df[cat_var])  

在准备数据时,考虑一些事情:

  • LoanID列是有序分类数据,需要使用一种热编码将其转换为数字,因为算法只理解数字

  • 标签编码器适用于多类的二进制类尝试使用一个热编码器或分解

  • 在一个df中为数字和转换的分类数据以及concat创建单独的列,用于训练和测试拆分

  • 作为你问题的一个例子:

    ohe_df = pd.get_dummies(df, columns=['Gender', 'Married', 'Education'])
    
    您可以使用:

    这种方法将为每一列使用不同的标签编码器,这也意味着您将在不同的列中使用相同的编号

    当您为所有人运行一个标签编码器时,只有当数字完全相同时,数字才会相同

    分类后,可以使用以下方法反转标签:

    from sklearn import preprocessing
    le1 = preprocessing.LabelEncoder()
    df['Gender'] =le1.fit_transform(df['Gender'])
    le2 = preprocessing.LabelEncoder()
    df['Married'] =le2.fit_transform(df['Married'])
    le3 = preprocessing.LabelEncoder()
    df['Education'] =le3.fit_transform(df['Education'])
    

    最好对每个类初始化LabelEncoder,否则您将无法执行逆变换(这在以后改进或排除模型故障时经常需要)。您尝试过什么?你做过任何研究吗?我试过“df.apply(LabelEncoder().fit_transform)”,但当我用另一个数据帧替换这个df帧时,我得到的是Nan值。你给出了清晰的信息,但我想学习深层编码,我在哪里可以学习?保持基本原理清晰,弄清楚需求和你想要建立什么样的模型,仔细研究数据,记下必要的预处理步骤和特征缩放步骤。保持练习如果一个数据集中有80列需要编码,这将花费大量时间,那么有没有其他方法可以在不影响数字列的情况下对所有数据集进行编码。Nather的解决方案可以做到这一点,但你不能做逆变换,那么逆变换有什么用处?以及如何执行。反变换与分类本身无关,只有当你想在分类后检查原始值时才感兴趣……代码写在我的答案alreadyThank you PV8中,顺便说一句,如何详细了解所有这些。我是说机器学习,因为我找不到正确的资源。
    from sklearn import preprocessing
    le1 = preprocessing.LabelEncoder()
    df['Gender'] =le1.fit_transform(df['Gender'])
    le2 = preprocessing.LabelEncoder()
    df['Married'] =le2.fit_transform(df['Married'])
    le3 = preprocessing.LabelEncoder()
    df['Education'] =le3.fit_transform(df['Education'])
    
    df['Married'] = le2.inverse_transform(df['Married']