1. 程式人生 > >Python數據挖掘—回歸—貝葉斯分類

Python數據挖掘—回歸—貝葉斯分類

方程 分享圖片 users pytho afr port code ike 設置

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)

Python數據挖掘—回歸—貝葉斯分類