博主簡介:風雪夜歸子(英文名: allen),機器學習演算法攻城獅,喜愛鑽研machine learning的黑科技,對deep learning和artificial intelligence充滿興趣,經常關注kaggle資料探勘競賽平台,對資料、machine learning和artificial intelligence有興趣的各位童鞋可以一起**哦,個人csdn部落格:
分類變數是經常遇到的問題。一方面它們提供了資訊;另一方面,它們可能是文字形式——純文字或者與文字相關的整數——就像**的索引一樣。
因此,我們在建模的時候往往需要將這些變數量化,但是僅僅用簡單的id
或者原來的形式是不行的。因為我們也需要避免在上一節裡通過閾值建立二元特徵遇到的問題。如果我們把資料看成是連續的,那麼也必須解釋成連續的。
這裡boston
資料集不適合演示。雖然它適合演示二元特徵,但是用來建立分類變數不太合適。因此,這裡用iris
資料集演示。
解決問題之前先把問題描述清楚。假設有乙個問題,其目標是**花萼的寬度;那麼花的種類就可能是乙個有用的特徵。
首先,讓我們匯入資料:
from
sklearn
import
datasets
iris
=datasets
.load_iris()x
=iris
.datay=
iris
.target
現在x
和y
都獲得了對應的值,我們把它們放到一起:
import
numpy
asnpd=
np.column_stack((x
,y))
下面我們把花型別y
對應那一列轉換成分類特徵:
from
sklearn
import
preprocessing
text_encoder
=preprocessing
.onehotencoder
()text_encoder
.fit_transform(d
[:,-
1:])
.toarray
()[:
5]
array([[ 1., 0., 0.],[ 1., 0., 0.],
[ 1., 0., 0.],
[ 1., 0., 0.],
[ 1., 0., 0.]])
這裡,編碼器為每個分類變數建立了額外的特徵,轉變成乙個稀疏矩陣。矩陣是這樣定義的:每一行由0和1構成,對應的分類特徵是1,其他都是0。用稀疏矩陣儲存資料很合理。
text_encoder
是乙個標準的scikit-learn模型,可以重複使用:
text_encoder
.transform(np
.ones((3
,1))).
toarray
()
array([[ 0., 1., 0.],[ 0., 1., 0.],
[ 0., 1., 0.]])
在scikit-learn和python庫中,還有一些方法可以建立分類變數。如果你更傾向於用scikit-learn,而且分類編碼原則很簡單,可以試試dictvectorizer
。如果你需要處理更複雜的分類編碼原則,patsy
是很好的選擇。
dictvectorizer
dictvectorizer
可以將字串轉換成分類特徵:
from
sklearn.feature_extraction
import
dictvectorizerdv=
dictvectorizer
()my_dict=[
foriiny
]dv.fit_transform
(my_dict).
toarray
()[:
5]
array([[ 1., 0., 0.],[ 1., 0., 0.],
[ 1., 0., 0.],
[ 1., 0., 0.],
[ 1., 0., 0.]])
python的詞典可以看成是乙個稀疏矩陣,它們只包含非0值。
pasty
patsy
是另乙個分類變數編碼的包。經常和statsmodels
一起用,patsy
可以把一組字串轉換成乙個矩陣。
這部分內容與 scikit-learn關係不大,跳過去也沒關係。例如,如果
x
和y
都是字串,dm = patsy.design_matrix("x + y")
將建立適當的列。如果不是,c(x)
將生成乙個分類變數。
例如,初看iris.target
,可以把它當做是乙個連續變數。因此,用下面的命令處理:
import
patsy
patsy
.dmatrix
("0 + c(species)"
,)
designmatrix with shape (150, 3)c(species)[0] c(species)[1] c(species)[2]
1 0 0
1 0 0
1 0 0
1 0 0
1 0 0
1 0 0
1 0 0
1 0 0
1 0 0
1 0 0
1 0 0
1 0 0
1 0 0
1 0 0
1 0 0
1 0 0
1 0 0
1 0 0
1 0 0
1 0 0
1 0 0
1 0 0
1 0 0
1 0 0
1 0 0
1 0 0
1 0 0
1 0 0
1 0 0
1 0 0
[120 rows omitted]
terms:
'c(species)' (columns 0:3)
(to view full data, use np.asarray(this_obj))
資料預處理1 分類特徵編碼
背景 we don t talk anymore 很多時候,在我們拿到的資料集裡,特徵不都是連續的值,而是由某些離散化取值的資料組成。例如,性別特徵可以具有如下取值 male female 天氣特徵有如下取值 rainy sunny snowy 這樣的特徵是無法直接被模型識別的,因此需要將這些特徵轉...
新聞分類 資料預處理
結構化資料,是可以表示成多行多列的形式,並且,每行 列 都有著具體的含義。非結構化資料,無法合理地表示為多行多列的形式,即使那樣表示,每行 列 也沒有具體的含義。文字資料,是一種非結構化資料,與我們之前分析的結構化資料有所不同。因此,其預處理的步驟與方式也會與結構化資料有所差異。文字資料預處理主要包...
系列二 資料預處理
旨在對資料探勘有個系統的認識,這部分僅僅是對於資料預處理!對於常規的資料預處理主要分為以下4步驟 1 資料清洗 解決缺失值 異常值 離群點的問題 2 資料整合 解決樣本重複 指標構建 屬性高度相似的問題 2 資料規約 解決資料規模過大的問題 4 資料變換 將資料轉化為更方便分析的資料 1 填充缺失值...