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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM