CountVectorizer
做用:對文本數據進行特徵值化python
sklearn.feature_extraction.text.CountVectorizer(stop_words=[])算法
咱們對如下數據進行特徵提取api
["life is short,i like python", "life is too long,i dislike python"]
具體步驟:數組
def count_demo(): """ 文本特徵抽取:CountVectorizer :return: None """ data = ["life is short,i like like python", "life is too long,i dislike python"] #實例化轉換器
transfer=CountVectorizer(stop_words=["is","too"]) #調用fit_transform
data_new=transfer.fit_transform(data) print("data_new:\n",data_new.toarray()) print("返回特徵名字:\n", transfer.get_feature_names()) return None
返回結果:app
接下來將英文換成中文機器學習
def count_chinese_demo(): """ 中文文本特徵抽取:CountVectorizer :return: None """ data = ["我 愛 北京 天安門", "天安門 上 太陽 升"] #實例化轉換器
transfer=CountVectorizer() #調用fit_transform
data_new=transfer.fit_transform(data) print("data_new:\n",data_new.toarray()) print("返回特徵名字:\n", transfer.get_feature_names()) return None
結果是:學習
可見不支持單箇中文,需用空格分割,如若不進行分割,會把整個句子來做爲特徵處理大數據
而後手動分詞實現是不太可能的,咱們採用jieba進行分詞spa
jieba分詞:3d
def cut_word(text): text=" ".join(list(jieba.cut(text))) return text def count_chinese_demo2(): """ 中文文本特徵抽取,自動分詞 :return: None """ data = ["一種仍是一種今天很殘酷,明天更殘酷,後天很美好,但絕對大部分是死在明天晚上,因此每一個人不要放棄今天。", "咱們看到的從很遠星系來的光是在幾百萬年以前發出的,這樣當咱們看到宇宙時,咱們是在看它的過去。", "若是隻用一種方式瞭解某樣事物,你就不會真正瞭解它。瞭解事物真正含義的祕密取決於如何將其與咱們所瞭解的事物相聯繫。"] text_new=[] for item in data: text_new.append(cut_word(item)) #實例化轉換器
transfer=CountVectorizer(stop_words=["一種","因此"]) #調用fit_transform
data_new=transfer.fit_transform(text_new) print("data_new:\n",data_new.toarray()) print("返回特徵名字:\n", transfer.get_feature_names()) return None
實例化容器中加入:stop_words的目的是去除沒有太大意義的詞
結果爲:
公式
案例
def tfidf(): """ 用TF-IDF的方法進行文本特徵抽取 """ data = ["一種仍是一種今天很殘酷,明天更殘酷,後天很美好,但絕對大部分是死在明天晚上,因此每一個人不要放棄今天。", "咱們看到的從很遠星系來的光是在幾百萬年以前發出的,這樣當咱們看到宇宙時,咱們是在看它的過去。", "若是隻用一種方式瞭解某樣事物,你就不會真正瞭解它。瞭解事物真正含義的祕密取決於如何將其與咱們所瞭解的事物相聯繫。"] text_new = [] for item in data: text_new.append(cut_word(item)) # 實例化轉換器
transfer = TfidfVectorizer(stop_words=["一種", "因此"]) # 調用fit_transform
data_new = transfer.fit_transform(text_new) print("data_new:\n", data_new.toarray()) print("返回特徵名字:\n", transfer.get_feature_names()) return None
結果以下:
總結
他所反映的是這些詞的重要性,主要應用於機器學習算法進行文章分類中前期數據處理方式
from sklearn.preprocessing import MinMaxScaler,StandardScaler
特徵的單位或者大小相差較大,或者某特徵的方差相比其餘的特徵要大出幾個數量級,容易影響(支配)目標結果,使得一些算法沒法學習到其它的特徵
經過對原始數據進行變換把數據映射到(默認爲[0,1])之間
做用於每一列,max爲一列的最大值,min爲一列的最小值,那麼X’’爲最終結果,mx,mi分別爲指定區間值默認mx爲1,mi爲0
def minmax_demo(): """ 歸一化 """
#1.獲取數據
data=pd.read_csv("datingTestSet2.txt", sep=',') data=data.iloc[:,:3] #2.實例化一個轉換器,範圍在0-1
transfer = MinMaxScaler(feature_range=[0,1]) #3.調用fit_transform
data_new=transfer.fit_transform(data) print("data_new:\n",data_new) print("特徵:\n",data.columns) return None
結果以下:
注意最大值最小值是變化的,另外,最大值與最小值很是容易受異常點影響,因此這種方法魯棒性較差,只適合傳統精確小數據場景。
經過對原始數據進行變換把數據變換到均值爲0,標準差爲1範圍內
做用於每一列,mean爲平均值,σ爲標準差
因此回到剛纔異常點的地方,咱們再來看看標準化
def stand_demo(): """ 歸一化 """
#1.獲取數據
data=pd.read_csv("datingTestSet2.txt", sep=',') data=data.iloc[:,:3] #2.實例化一個轉換器
transfer = StandardScaler() #3.調用fit_transform
data_new=transfer.fit_transform(data) print("data_new:\n",data_new) print("每一列特徵的平均值:\n", transfer.mean_) print("每一列特徵的方差:\n", transfer.var_) return None
結果以下:
在已有樣本足夠多的狀況下比較穩定,適合現代嘈雜大數據場景。
數據中包含冗餘或無關變量(或稱特徵、屬性、指標等),旨在從原有特徵中找出主要特徵。
from sklearn.feature_selection import VarianceThreshold
刪除低方差的一些特徵,前面講過方差的意義。再結合方差的大小來考慮這個方式的角度。
難點:在於掌握閾值的大小,來進行合理的控制低方差的過濾
反映變量之間相關關係密切程度的統計指標
相關係數的值介於–1與+1之間,即–1≤ r ≤+1。
通常可按三級劃分:|r|<0.4爲低度相關;0.4≤|r|<0.7爲顯著性相關;0.7≤|r|<1爲高度線性相關
#低方差過濾
def variance_demo(): """ 刪除低方差特徵——特徵選擇 :return: None """ data = pd.read_csv("factor_returns.csv") data=data.iloc[:,1:-2] print("data:\n",data) # 一、實例化一個轉換器類
transfer = VarianceThreshold(threshold=10) # 二、調用fit_transform
data_new = transfer.fit_transform(data) print("date_new:\n", data_new) print("形狀:\n", data_new.shape) #計算兩個變量之間的相關係數
r=pearsonr(data["pe_ratio"],data["pb_ratio"]) print("相關係數:\n",r) r2=pearsonr(data["revenue"],data["total_expense"]) print("revenue與total_expense之間的相關性:\n",r2) plt.figure(figsize=(20,8),dpi=100) plt.scatter(data["revenue"],data["total_expense"]) plt.show() return None
定義:高維數據轉化爲低維數據的過程,在此過程當中可能會捨棄原有數據、創造新的變量
做用:是數據維數壓縮,儘量下降原數據的維數(複雜度),損失少許信息。
假設對於給定5個點,數據以下
(-1,-2) (-1, 0) ( 0, 0) ( 2, 1) ( 0, 1)
要求:將這個二維的數據簡化成一維? 而且損失少許的信息
這個過程如何計算的呢?找到一個合適的直線,經過一個矩陣運算得出主成分分析的結果(不須要理解)
def pca_demo(): """ pca降維 """ data=[[2,8,4,5],[6,3,0,8],[5,4,9,1]] #實例化一個轉換器
transfer=PCA(n_components=0.95) #調用fit_transform
data_new=transfer.fit_transform(data) print("保留95%的信息,降維結果爲:\n",data_new) # 一、實例化PCA, 整數——指定降維到的維數
transfer2 = PCA(n_components=3) # 二、調用fit_transform
data2 = transfer2.fit_transform(data) print("降維到3維的結果:\n", data2) return None
結果以下: