zoukankan      html  css  js  c++  java
  • Python数据挖掘—分类—贝叶斯分类

    pandas之get_dummies

    方法:pandas.get_dummies(data,prefix=None,prefix_sep="_",dummy_na=False,columns=None,sparse=False,drop_first=False)

    该方法可以将类别变量转换成新增的虚拟变量/指示变量

    参数说明:

    • data:array-like、Series 、 DataFrame  , 输入数据

    • prefix:string、list of strings、dict of strings ,default为None,get_dummies转换后,列名的前缀

    • columns:list-like, default为False,指定需要实现类别转换的列名

    • dummy_na:bool, default为False,增加一列表示空缺值,如果False就忽略空缺值

    • drop_first:fool,default为False ,获取K中的K-1个类别之,去除第一个

    举例:

    下面通过例子来进一步说明get_dummies()

    1、首先构造一个数据列

    1 import pandas as pd
    2 s=pd.Series(list('abca'))
    3 
    4 s_1=pd.get_dummies(s)

    1、两个变量:s为Series、s_1为DataFrame

    变成

    2、去除第一列

    1 b=pd.get_dummies(s,drop_first=True)

    得到:

    3、查看dummy_na功能

    创建数据

    1 import numpy as np
    2 s_2=["a","b",np.nan]

    结果为:

    1 pd.get_dummies(s_2,dummy_na=True)
    2 pd.get_dummies(s_2,dummy_na=False)

    结果为:

     4、创建数据框

    1 df=pd.DataFrame({
    2     "A":["a","b","a"],"B":["b","a","c"],
    3     "C":[1,2,3]})
    4 pd.get_dummies(df,prefix=["col_1","col_2"])      

     结果为:

     变为→

     实例:

     1 import pandas
     2 
     3 data=pandas.read_csv(
     4         "C:\Users\Jw\Desktop\python_work\Python数据挖掘实战课程课件\5.2\data1.csv",
     5         encoding='utf-8')
     6 
     7 
     8 dummyColumns=['症状','职业']
     9 
    10 for column in dummyColumns:
    11     data[column]=data[column].astype('category')
    12     
    13 
    14 dummiesData=pandas.get_dummies(
    15     data,
    16     columns=dummyColumns,
    17     prefix=dummyColumns,
    18     prefix_sep=' ')
    19 
    20 dummiesData=pandas.get_dummies(
    21     data,
    22     columns=dummyColumns,
    23     prefix=dummyColumns,
    24     prefix_sep=' ',
    25     drop_first=True)

     构造虚拟变量

    drop_first后

    实例

    步骤:

    •  导入数据,设置虚拟变量,将虚拟变量转变为category类,(category变量)类别变量转换成新增的虚拟变量/指示变量
    • 通过pandas自带的get_dummies功能,将所有分类扁平化扩张以增加列的形式实现,离散数据按照[0,1]分布。

      知识点:

    Categorical Type:什么是categorical Type?不知道确切的英文翻译,但是可以按照字面意思来也就是分类数据,比如皮肤的颜色,可以分为黄色,白色,黑色等等,但是这些数据的均值以及数值计算比如加减的结果是没有意义的;但是我们可以将不同的数据分为这几类,在比如人类的性别,男女也属于categorical 类别; 英文中欧冠也可以称之为Nominal Data.

     1 import pandas;
     2 
     3 data = pandas.read_csv(
     4     "C:\Users\Jw\Desktop\python_work\Python数据挖掘实战课程课件\5.2\data1.csv",
     5     encoding='utf8'
     6 )
     7 
     8 dummyColumns = ['症状', '职业']
     9 
    10 for column in dummyColumns:
    11     data[column]=data[column].astype('category')
    12 
    13 dummiesData = pandas.get_dummies(  #调用get_dummyColumns方法进行不可比较大小虚拟变量的转换
    14     data, 
    15     columns=dummyColumns,
    16     prefix=dummyColumns,
    17     prefix_sep=" "
    18 )
    19 
    20 dummiesData = pandas.get_dummies(
    21     data, 
    22     columns=dummyColumns,
    23     prefix=dummyColumns,
    24     prefix_sep=" ",
    25     drop_first=True
    26 )
    1 #伯努利贝叶斯
    2 from sklearn.naive_bayes import BernoulliNB
    3 BNBModel = BernoulliNB()
    4 
    5 fNames = ['症状 打喷嚏', '职业 建筑工人', '职业 护士', '职业 教师']
    6 tData = dummiesData['疾病']
    7 fData = dummiesData[fNames]
    8 
    9 BNBModel.fit(fData, tData)

    上述代码:建模,构造伯努利方程,设置自变量和因变量,训练变量,得到训练集

     1 #病症是打喷嚏的建筑工人
     2 newData = pandas.DataFrame({
     3     '症状':['打喷嚏'],
     4     '职业':['建筑工人']
     5 })
     6 
     7 for column in dummyColumns:
     8     newData[column] = newData[column].astype(
     9         'category', 
    10         categories=data[column].cat.categories
    11     )
    12 
    13 dummiesNewData = pandas.get_dummies(
    14     newData, 
    15     columns=dummyColumns,
    16     prefix=dummyColumns,
    17     prefix_sep=" ",
    18     drop_first=True
    19 )
    20 
    21 pData = dummiesNewData[fNames]
    22 BNBModel.predict(pData)

    训练:

     1 #病症是打喷嚏的建筑工人
     2 newData=pandas.DataFrame({
     3         '症状':['打喷嚏'],
     4         '职业':['建筑工人']})
     5 
     6 for column in dummyColumns:
     7     newData[column]=newData[column].astype(
     8         'category', 
     9         categories=data[column].cat.categories
    10 )
    11     
    12 dummiesNewData=pandas.get_dummies(
    13         newData,
    14         columns=dummyColumns,
    15         prefix=dummyColumns,
    16         prefix_sep=' ',
    17         drop_first=True)
    18 
    19 pData=dummiesNewData[fNames]
    20 BNBModel.predict(pData)
  • 相关阅读:
    uvalive 3971 Assemble
    poj 1064 Cable master
    1130mysql explain中的type列含义和extra列的含义
    1128ORDER BY的原理
    1125Sending data
    1125MySQL Sending data导致查询很慢的问题详细分析
    1125mysqbinlog日志
    1122Shell脚本之利用mysqldump备份MySQL数据库
    1122从业务优化MYSQL
    1122MySQL性能优化之 Nested Loop Join和Block Nested-Loop Join(BNL)
  • 原文地址:https://www.cnblogs.com/U940634/p/9745737.html
Copyright © 2011-2022 走看看