'''
@description 特徵工程 - preprocess
1 框架:scikit-learn,依賴模組:scipy、pandas、numpy
2 pip3 install scikit-learn -i --trusted-host pypi.douban.com
3 模型 = 資料 + 演算法
4 機器學習開發流程:原始資料獲取(特徵值向量)->機器學習工程目標->資料加工處理->特徵工程->演算法選擇與實現
->模型評估
4 主流演算法是固定,可以通過超引數進行演算法調優,反而特徵工程關係最終模型的效能、準確性、穩定性
@author wolf
@time 2018-07-27
'''from sklearn.feature_extraction import dictvectorizer
from sklearn.feature_extraction.text import countvectorizer
from sklearn.feature_extraction.text import tfidfvectorizer
from sklearn.preprocessing import minmaxscaler, standardscaler, imputer
from sklearn.feature_selection import variancethreshold
from sklearn.decomposition import pca
import jieba
import numpy as np
# 1 詞典特徵
'''one-hot矩陣
應用場景:自然語言處理、情感分析
數值化特徵不處理,非數值化特徵數值化-one-hot
'''def dictvec():
dict = dictvectorizer(sparse=false)
data = dict.fit_transform(
[, ,
])print(dict.get_feature_names())
print(data)
# 2 純文字特徵
'''2.1 計算分詞詞頻
應用場景:自然語言處理、情感分析
'''def countvec():
cv = countvectorizer()
c1, c2, c3 = countword()
data = cv.fit_transform([c1, c2, c3])
print(cv.get_feature_names())
print(data.toarray())
'''2.2 tf-idf演算法:
應用場景:自然語言處理、情感分析
計算分詞的tfidf
原因:大部分語氣詞詞頻很高,但不能代表文件的屬性
tf:term frequency 改分詞在文件的詞頻
idf:inverse document frequency log(總文件數/該分詞出現的文件數)
tf-idf = tf * idf 表示該分詞在文件的重要性,與詞頻成正比,與該分詞出現的文件數成反比
fit_transform拆分分詞是按" "拆分,英文語法按" "斷詞而中文是按","短詞,所以借助jieba工具類
'''def tfidfvec():
tf = tfidfvectorizer()
c1, c2, c3 = countword()
print([c1, c2, c3])
data = tf.fit_transform([c1, c2, c3])
print(tf.get_feature_names())
print(data.toarray())
def countword():
'的什麼寫清楚和檔案檢查清楚')
con2 = jieba.cut('使用idea開發工具的同學注意避免紅色(有問題)、黃線(**重複)、灰色(未呼叫)**預警提示')
con3 = jieba.cut('使用eclipse開發工具的同學注意黃線(未呼叫、**重複)**預警提示')
content1 = list(con1)
content2 = list(con2)
content3 = list(con3)
c1 = ''.join(content1)
c2 = ''.join(content2)
c3 = ''.join(content3)
return c1, c2, c3
# 4 數值特徵
'''4.1 數值特徵歸一化處理
歸一化目的:使得某一特徵對最終結果不會造成更大的影響
總結:注意在特定場景下最大值與最小值是變化的。另外最大值與最小值非常容易受異常點影響,所以這種方法的魯棒性較差,只適合
傳統精確小資料場景
計算公式:x` = (x - min) / (max - min) x`` = x` * (mx - mi) + mi mx預設為1,mi預設為0
'''def mm():
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
'''4.2 數值特徵標準化處理
特點:通過對原始資料進行變換把資料變換到均值為0,方差為1範圍內
公式:x' = (x - mean) / c c為標準差
var(方差) = ((x1 - mean)^ + (x2 - mean)^ + ...) / n, c = var開平方根
var(方差):考量資料的穩定性
'''def stand():
std = standardscaler()
data = std.fit_transform([[1., -1., 3.], [2., 4., 2.], [4., 6., -1.]])
print(data)
return none
'''4.3 數值特徵缺失值處理
pandas對缺失值的處理
a 指定值填充
df = pd.dataframe(np.random.randn(3, 3), index=['a', 'c', 'e'],columns=['one','two', 'three'])
df = df.reindex(['a', 'b', 'c'])
print (df.fillna(df.var))
b 使用現有資料(向前、向後填充)
df = pd.dataframe(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', 'h'], columns=['one', 'two',
'three'])
df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
#******************************==向前填充 pad/fill
print (df.fillna(method='pad'))
#******************************==向前填充 bfill/backfill
print (df.fillna(method='bfill'))
c 丟棄缺失值:pandas axis 0:行1:列
df = pd.dataframe(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', 'h'],columns=['one', 'two',
'three'])
df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
print (df.dropna(axis=0))
d 指定值替換
df = pd.dataframe()
print (df.replace())
'''# sklearn缺失值處理
def im():
# nan, nan
# axis 0:列 1:行
im = imputer(missing_values="nan", strategy='mean', axis=0)
data = im.fit_transform([[1, 2], [np.nan, 3], [7, 6]])
print(data)
return none
# 5 資料特徵降維
# 5.1 過濾方法
def var():
var = variancethreshold(threshold=0.0)
data = var.fit_transform([[0, 2, 0, 3], [0, 1, 4, 3], [0, 1, 1, 3]])
print(data)
return none
# 5.2 主成分分析
'''n_components小數:原資料特徵保持資料原始性到百分比
n_components小數:原資料特徵降維到幾個特徵
數學原理:
'''def pca():
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
if __name__ == "__main__":
tfidfvec()
機器學習之特徵工程
在工業界一直流行著一句話,資料的質量決定了模型的上線了,而特徵工程與模型的選擇只是盡可能的去逼近這個上線,當我們在資料無法改變的情況,特徵工程的優化便顯得尤為重要。我們輸入模型中,模型只認識資料,並不知道某一列所代表的含義,例如樹模型,它只會按照一定的規則去不停的分支,並不知道分支所代表的含義,而特...
機器學習之特徵工程
特徵工程是將原始資料轉化為更好代表 模型的潛在問題的特徵的過程,從而提高了對位置資料的 準確性。其包括特徵構建 特徵提取 特徵選擇三部分。資料和特徵決定了機器學習的上限,而模型和演算法只是逼近這個上限而已,成功的結果往往源自最開始對資料的處理。tf term frequency,詞的頻率,即出現的次...
機器學習之特徵工程
一 特徵抽象 特徵抽象是指將資料來源抽象演算法可以理解的資料,我們期望的資料是一組可以表達資料某種特性的數字。下面對幾種資料型別抽象舉例 1 時間戳 以某一天為基準值,採用演算法算出某數值,其他的採用和該基準值的差距。2 二值類問題 文字或其他描述的二值問題,可以量化為0和1表示。3 多值有序問題 ...