八 用scikit learn做特徵提取

2021-07-26 10:17:46 字數 2752 閱讀 6034

現實世界中多數特徵都不是連續變數,比如分類、文字、影象等,為了對非連續變數做特徵表述,需要對這些特徵做數學化表述,因此就用到了特徵提取

比如城市作為乙個特徵,那麼就是一系列雜湊的城市標記,這類特徵我們用二進位制編碼來表示,是這個城市為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計算方法是重複移動類的重心,以實現成本函式最小化,成本函式為 其中...