現實世界中多數特徵都不是連續變數,比如分類、文字、影象等,為了對非連續變數做特徵表述,需要對這些特徵做數學化表述,因此就用到了特徵提取
比如城市作為乙個特徵,那麼就是一系列雜湊的城市標記,這類特徵我們用二進位制編碼來表示,是這個城市為1,不是這個城市為0
比如有三個城市:北京、天津、上海,我們用scikit-learn的dictvector做特徵提取,如下:
# coding:utf-8
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )
from sklearn.feature_extraction import dictvectorizer
onehot_encoder = dictvectorizer()
instances = [,, ]
print(onehot_encoder.fit_transform(instances).toarray())
執行後輸出:
[[ 0.
1.0.]
[ 0.
0.1.]
[ 1.
0.0.]]
不同編碼表示不同城市
文字特徵無非這幾種:有這個詞還是沒有、這個詞的tf-idf
第一種情況用詞庫表示法,如下:
# coding:utf-8
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )
from sklearn.feature_extraction.text import countvectorizer
corpus = [
'unc played duke in basketball',
'duke lost the basketball game' ]
vectorizer = countvectorizer()
print vectorizer.fit_transform(corpus).todense()
print vectorizer.vocabulary_
執行後輸出如下:
[[110
1010
1] [111
0101
0]]
數值為1表示詞表中的這個詞出現,為0表示未出現
詞表中的數值表示單詞的座標位置
第二種情況tf-idf表示詞的重要性,如下:
# coding:utf-8
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )
from sklearn.feature_extraction.text import tfidfvectorizer
corpus = [
'the dog ate a sandwich and i ate a sandwich',
'the wizard transfigured a sandwich' ]
vectorizer = tfidfvectorizer(stop_words='english')
print(vectorizer.fit_transform(corpus).todense())
print(vectorizer.vocabulary_)
執行後結果:
[[ 0.75458397
0.37729199
0.53689271
0.0. ]
[ 0.
0.0.44943642
0.6316672
0.6316672 ]]
值最高的是第乙個句子中的ate,因為它在這乙個句子裡出現了兩次
值最低的自然是本句子未出現的單詞
資料標準化就是把資料轉成均值為0,是單位方差的。比如對如下矩陣做標準化:
# coding:utf-8
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )
from sklearn import preprocessing
import numpy as np
x = np.array([
[0., 0., 5., 13., 9., 1.],
[0., 0., 13., 15., 10., 15.],
[0., 3., 15., 2., 0., 11.]
])print(preprocessing.scale(x))
執行結果:
[[ 0. -0.70710678 -1.38873015
0.52489066
0.59299945 -1.35873244]
[ 0. -0.70710678
0.46291005
0.87481777
0.81537425
1.01904933]
[ 0.
1.41421356
0.9258201 -1.39970842 -1.4083737
0.33968311]]
用scikit learn學習DBSCAN聚類
在dbscan密度聚類演算法中,我們對dbscan聚類演算法的原理做了總結,本文就對如何用scikit learn來學習dbscan聚類做乙個總結,重點講述引數的意義和需要調參的引數。在scikit learn中,dbscan演算法類為sklearn.cluster.dbscan。要熟練的掌握用db...
用scikit learn學習DBSCAN聚類
在dbscan密度聚類演算法中,我們對dbscan聚類演算法的原理做了總結,本文就對如何用scikit learn來學習dbscan聚類做乙個總結,重點講述引數的意義和需要調參的引數。在scikit learn中,dbscan演算法類為sklearn.cluster.dbscan。要熟練的掌握用db...
十一 用scikit learn做聚類分析
線性回歸和邏輯回歸都是監督學習方法,聚類分析是非監督學習的一種,可以從一批資料集中探索資訊,比如在社交網路資料中可以識別社群,在一堆菜譜中識別出菜系。本節介紹k means聚類演算法 k是乙個超引數,表示要聚類成多少類。k means計算方法是重複移動類的重心,以實現成本函式最小化,成本函式為 其中...