機器學習特徵工程
1.機器學習數據類型
標稱型:標稱型目標變量的結果只在有限目標集中取值,如真與假(標稱型目標變量主要用於分類)
數值型:數值型目標變量則可以從無限的數值集合中取值,如0.100,42.001等 (數值型目標變量主要用於迴歸分析)
2.特徵數據抽取
(1)對於語句等字符串抽取特徵值
此部分爲統計句子中單詞出現的頻率並轉化爲向量
from sklearn.feature_extraction.text import CountVectorizer
# 實例化CountVectorizer
vector = CountVectorizer()
# 調用fit_transform輸入並轉換數據
res = vector.fit_transform(["life is short,i like python","life is too long,i dislike python"])
# 打印結果
print(vector.get_feature_names())
print(res.toarray())
使用tf-idf轉換句子
from sklearn.feature_extraction.text import TfidfVectorizer
import jieba
def tfidfvec():
"""
中文特徵值化
:return: None
"""
c1, c2, c3 = cutword()
print(c1, c2, c3)
tf = TfidfVectorizer()
data = tf.fit_transform([c1, c2, c3])
print(tf.get_feature_names())
print(data.toarray())
return None
def cutword():
con1 = jieba.cut("今天很殘酷,明天更殘酷,後天很美好,但絕對大部分是死在明天晚上,所以每個人不要放棄今天。")
con2 = jieba.cut("我們看到的從很遠星系來的光是在幾百萬年之前發出的,這樣當我們看到宇宙時,我們是在看它的過去。")
con3 = jieba.cut("如果只用一種方式瞭解某樣事物,你就不會真正瞭解它。瞭解事物真正含義的祕密取決於如何將其與我們所瞭解的事物相聯繫。")
# 轉換成列表
content1 = list(con1)
content2 = list(con2)
content3 = list(con3)
# 吧列表轉換成字符串
c1 = ' '.join(content1)
c2 = ' '.join(content2)
c3 = ' '.join(content3)
return c1, c2, c3
if __name__ == "__main__":
tfidfvec()
(2)字典類型數據抽取特徵
from sklearn.feature_extraction import DictVectorizer
def dictvec():
"""
字典數據抽取
:return: None
"""
# 實例化
dict = DictVectorizer(sparse=False)
# 調用fit_transform
data = dict.fit_transform([{'city': '北京','temperature': 100}, {'city': '上海','temperature':60}, {'city': '深圳','temperature': 30}])
print(dict.get_feature_names())
print(dict.inverse_transform(data))
print(data)
return None
3.歸一化和標準化
(1)歸一化
可以將特徵值轉化爲區間[0,1]之間的數,將所有特徵數據統一到一個標準之下。
from sklearn.preprocessing import MinMaxScaler, StandardScaler
def mm():
"""
歸一化處理
:return: NOne
"""
#feature_range默認0-1
mm = MinMaxScaler(feature_range=(2, 3))
data = mm.fit_transform([[90,2,10,40],[60,4,15,45],[75,3,13,46]])
print(data)
return None
(2)標準化
常用的方法是z-score標準化,經過處理後的數據均值爲0,標準差爲1,處理方法是:
X′ =x−μ/σ
其中\muμ是樣本的均值,\sigmaσ是樣本的標準差,它們可以通過現有的樣本進行估計,在已有的樣本足夠多的情況下比較穩定,適合嘈雜的數據場景
from sklearn.preprocessing import MinMaxScaler, StandardScaler
def stand():
"""
標準化縮放
:return:
"""
std = StandardScaler()
data = std.fit_transform([[ 1., -1., 3.],[ 2., 4., 2.],[ 4., 6., -1.]])
print(data)
return None
4.特徵值降維
減小特徵值數量,減少計算複雜度
(1)計算方差,將方差小於1的特徵值刪除
from sklearn.feature_selection import VarianceThreshold
def var():
"""
特徵選擇-刪除低方差的特徵
:return: None
"""
var = VarianceThreshold(threshold=1.0)
data = var.fit_transform([[0, 2, 0, 3], [0, 1, 4, 3], [0, 1, 1, 3]])
print(data)
return None
(2)PCA主成分分析
通過座標變換將特徵映射到新的座標系中的一種線性變換
from sklearn.decomposition import PCA
def pca():
"""
主成分分析進行特徵降維
:return: None
"""
#n_components表示保存信息量,一般爲0.9-0.95
pca = PCA(n_components=0.9)
data = pca.fit_transform([[2,8,4,5],[6,3,0,8],[5,4,9,1]])
print(data)
return None