python机器学习数据预处理之离散变量的处理方法

本章将分享用独热编码的方式来处理离散型变量,本文的数据和方法学习自Python3《机器学习实战》学习笔记(三):决策树实战篇之为自己配个隐形眼镜_机器学习gain计算例题贷款申请样本_Jack-Cui的博客-CSDN博客

下面介绍一下读热编码:

独热编码(One-Hot Encoding)是一种常用的特征编码方法,用于将离散型的特征变量转换为机器学习算法可以处理的数值表示。

独热编码的基本思想是创建一个新的二进制特征变量,对原始特征的每个可能取值创建一个对应的新特征,然后用0和1表示该特征是否具有相应的取值。对于原始特征的每个可能取值,如果样本具有该取值,则对应的新特征取值为1,否则为0。

例如,假设我们有一个原始特征"颜色",可能的取值为{“红色”, “绿色”, “蓝色”}。通过独热编码,我们可以将该特征变为三个新特征:“颜色_红色”、“颜色_绿色"和"颜色_蓝色”。如果一个样本的颜色是绿色,则对应的独热编码表示为(0, 1, 0)。

下面,以一个实际案例来讲解如何对离散数据进行转化,并构建决策树模型学习转化之后的数据。

在下面这个函数中,serialization意为“序列化”,该函数的作用是对数据进行序列化

def serialization(fileName):
    with open(fileName,'r',encoding='utf_8') as fr:
        dataPurge=[Each_data.strip().split('\t') for Each_data in fr.readlines()]
        # print(dataPurge)
        pass
    data_target = []

    #删除第一列,因为第一列是序号
    for i in dataPurge:
        del i[0]
    # print(dataPurge)

    #得到每一个样本的标签
    for i in dataPurge:
        data_target.append(i[-1])
        pass
    print(data_target)

    target=['age','job','house','credit']
    data_list=[]
    data_dict={}

    #下面构建list对象,并以此构建dict对象,生成DataFrame

    for each in target:
        for eachdata in dataPurge:
            data_list.append(eachdata[target.index(each)])
        data_dict[each]=data_list
        data_list=[]
        pass
    print("整合后的数据:")
    print(data_dict)

    #构建DataFrame对象
    df=pd.DataFrame(data_dict)
    print("序列化前:")
    print(df)
    #将DataFrame对象序列化
    ser=LabelEncoder()#构建LabelEncoder对象用于序列化
    for col in df.columns:
        df[col]=ser.fit_transform(df[col])
        pass
    # print("序列化后:")
    # print(df)
    return df

总代码:

import pandas as pd
from sklearn.neural_network import MLPClassifier
from sklearn.neighbors import KNeighborsClassifier
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']#设置默认使用中文字体
from sklearn import tree
from sklearn import datasets
from sklearn.preprocessing import LabelEncoder, OneHotEncoder


def serialization(fileName):
    with open(fileName,'r',encoding='utf_8') as fr:
        dataPurge=[Each_data.strip().split('\t') for Each_data in fr.readlines()]
        # print(dataPurge)
        pass
    data_target = []

    #删除第一列,因为第一列是序号
    for i in dataPurge:
        del i[0]
    # print(dataPurge)

    #得到每一个样本的标签
    for i in dataPurge:
        data_target.append(i[-1])
        pass
    print(data_target)

    target=['age','job','house','credit']
    data_list=[]
    data_dict={}

    #下面构建list对象,并以此构建dict对象,生成DataFrame
    
    
    for each in target:
        for eachdata in dataPurge:
            data_list.append(eachdata[target.index(each)])
        data_dict[each]=data_list
        data_list=[]
        pass
    print("整合后的数据:")
    print(data_dict)

    #构建DataFrame对象
    df=pd.DataFrame(data_dict)
    print("序列化前:")
    print(df)
    #将DataFrame对象序列化
    ser=LabelEncoder()#构建LabelEncoder对象用于序列化
    for col in df.columns:
        df[col]=ser.fit_transform(df[col])
        pass
    # print("序列化后:")
    # print(df)
    return df



if __name__=='__main__':
    data=serialization('dataSet')

    print("打印处理好的数据:")
    print(data)

    train_X=data.loc[0:9,"age":"house"]
    print("处理好后的属性集:")
    print(train_X)
    train_y=data.loc[0:9,"credit"]
    print("处理好后的标签:")
    print(train_y)

    test_X=data.loc[10:13,"age":"house"]
    print("处理好后的验证集属性集:")
    print(test_X)
    print("处理好后的验证集标签:")
    test_y=data.loc[10:13,"credit"]
    print(test_y)

    clf=tree.DecisionTreeClassifier()
    clf.fit(train_X,train_y)

    predict=clf.predict(test_X)
    print("预测的结果是:")
    print(predict)
    score=clf.score(test_X,test_y)
    print("预测准确率是:")
    print(score)

    tree.plot_tree(clf)
    plt.show()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值