日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python人工智能——机器学习——特征工程

發布時間:2024/4/30 python 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python人工智能——机器学习——特征工程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數據的特征工程

1.特征工程是什么

特征工程是將原始數據轉換為更好地代表預測模型的潛在問題的特征的過程,從而提高了對位置數據的預測準確性。

2.特征工程的意義

直接影響預測結果

3.scikit-learn庫介紹

python語言的機器學習工具

scikit-learn包括許多知名的機器學習算法的實現

scikit-learn文檔完善,容易上手,豐富的API

4.數據的特征抽取

(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())


通過演示得出結論:

特征抽取對文本等數據進行特征值化,即轉化為數字值。 特征值化是為了計算機更好的去理解數據

(2)sklearn特征抽取API

sklearn.feature_extraction

(3)字典特征抽取

作用:對字典數據進行特征值化

sklearn.feature_extraction.DictVectorizer

DictVectorizer語法

DictVectorizer(sparse=True,…)

DictVectorizer.fit_transform(X)X:字典或者包含字典的迭代器返回值:返回sparse矩陣 DictVectorizer.inver_transform(X)X:array數據或者sparse矩陣返回值:轉換之前數據格式 DictVectorizer.get_feature_names()返回類別名稱 DictVectorizer.transform(X)按照原先的標準轉換

流程

1.實例化DictVectorizer2.調用fit_transform方法輸入數據并轉換,注意返回格式

演示

from sklearn.feature_extraction import DictVectorizerdef dictvec():'''字典數據抽取:return: none'''#實例化dict=DictVectorizer()#調用fit_transformdata=dict.fit_transform([{'city':'北京','temperature':100},{'city':'上海','temperature':60},{'city':'深圳','temperature':30}])print(data)return Noneif __name__=='__main__':dictvec()


返回值:sparse矩陣格式
原因:節約內存,方便讀取處理

其實也可以轉換為普通二維矩陣:

dict=DictVectorizer(sparse=False)


兩次輸出沒有什么差別,只不過sparse矩陣沒有打印0值。

打印類別:

print(dict.get_feature_names())


字典數據抽取:把字典中一些類別數據,分別進行轉換成特征。

數組形式,有類別特征,先要轉換字典數據。

(4)文本特征抽取

作用:對文本數據進行特征值化

CountVectorizer語法

CountVectorizer()返回詞頻矩陣CountVectorizer.fit_transform(X)X:文本或者包含文本字符串的可迭代對象返回值:返回sparse矩陣CountVectorizer.inverse_transform(X)X:array數組或者sparse矩陣返回值:轉換之前數據格式CountVectorizer.get_feature_name()返回值:單詞列表

流程

1.實例化CountVectorizer2.調用fit_transform方法輸入數據并轉換,注意返回格式,利用toarray()進行矩陣轉換array數組

演示

def countvec():'''對文本進行特征值化:return: none'''cv=CountVectorizer()data=cv.fit_transform(["life is short,i like python","life is too long,i dislike python"])print(data)return None


這仍然是sparse矩陣,要轉換成普通二維矩陣:

print(data.toarray())


打印類別:

print(cv.get_feature_names())


1.詞的列表:統計所有文章當中的詞,重復的只看做一次。
2.對每篇文章,在詞的列表里面統計每個詞出現的次數。(單個字母不統計)

對于中文情況:

data=cv.fit_transform(["人生苦短,我用python","人生漫長,不用python"])


顯然,中文情況不能很好的抽取特征。

注意,切分的依據不是逗號“,”

data=cv.fit_transform(["人生 苦短,我用 python","人生 漫長,不用 python"])


所以,需要對中文進行分詞才能詳細的進行特征值化。

分詞需要的包:

import jieba

然后進行分詞:

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 def countvec():'''對文本進行特征值化:return: none'''c1,c2,c3=cutword()print(c1,c2,c3)cv=CountVectorizer()data=cv.fit_transform([c1,c2,c3])print(cv.get_feature_names())print(data.toarray())return None

結果如下:

Building prefix dict from the default dictionary ... Dumping model to file cache C:\Users\dai'er\AppData\Local\Temp\jieba.cache Loading model cost 0.968 seconds. Prefix dict has been built succesfully. 這是 一個 久遠 的 故事 。 當 你 笑 著 醒 了 的 時候 別提 會 有 多 快樂 ! 早晨 的 微笑 是 有 魔力 的 , 帶來 一天 的 好 心情 。 六一 的 任性 魔術 是 將 手中 的 “ 魔法 棒 ” 敲醒 遇到 的 第一個 熟悉 的 可愛 的 人 。 誰 會 繼續 小小 傲嬌 可是 要 飛 上天 太陽 高高的 照 。 敲醒 了 那個 人竟 不知 太陽 在 哪 , 傻笑 著 , 如初 美好 。 傲嬌 貓 ['一個', '一天', '上天', '不知', '久遠', '人竟', '任性', '傲嬌', '傻笑', '六一', '別提', '可是', '可愛', '太陽', '如初', '小小', '帶來', '微笑', '心情', '快樂', '手中', '故事', '敲醒', '早晨', '時候', '熟悉', '第一個', '繼續', '美好', '這是', '遇到', '那個', '高高的', '魔力', '魔術', '魔法'] [[1 1 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 1 0 0 0 0 1 0 0 0 1 0 0][0 0 1 0 0 0 1 1 0 1 0 1 1 1 0 1 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 0 1 1][0 0 0 1 0 1 0 1 1 0 0 0 0 1 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0]]

但實際上,統計單詞次數的分類方式不怎么常用。(一些中性詞會干擾分類)

TF-IDF
TF-IDF的主要思想:如果某個詞或短語在一篇文章中出現的概率高,并且在其它文章中很少出現,則認為此詞或者短語具有很好的類別區分能力,適合用來分類。

TF-IDF作用:用以評估一字詞對于一個文件集或一個語料庫中的其中一份文件的重要程度。

樸素貝葉斯
tf idf —— tf*idf——重要性程度
tf: term frequency 詞的頻率 出現的次數
idf: inverse document frequency 逆文檔頻率 log(總文檔數量/該詞出現的文檔數量)

TfidfVectorizer語法

TfidfVectorizer(stop_words=None,…)返回詞的權重矩陣TfidfVectorizer.fit_transform(X)X:文本或者包含文本字符串的可迭代對象返回值:返回spars矩陣TfidfVectorizer.inverse_transform(X)X:array數組或者sparse矩陣返回值:轉換之前數據格式TfidfVectorizer.get_feature_names()返回值:單詞列表

為什么需要TfidfVectorizer?
答:分類是機器學習算法的重要依據。

5.數據的特征預處理

對數據進行處理。

特征預處理是什么?
通過特定的統計方法(數學方法)將數據轉換成算法要求的數據。

數值型數據:標準縮放:1.歸一化。2.標準化。3.缺失值。
類別型數據:one-hot編碼
時間類型:時間的切分

1.特征預處理的方法
2.sklearn特征預處理API——sklearn.preprocessing

(1)線性歸一化。
也稱min-max標準化、離差標準化;是對原始數據的線性變換,使得結果值映射到[0,1]之間。
特點:通過對原始數據進行變換把數據映射到(默認為[0,1])之間。
目的:使得某一個特征對最終結果不會造成更大影響。
轉換函數如下:

MinMaxScaler語法

MinMaxScalar(feature_range=(0,1)…)每個特征縮放到給定范圍(默認[0,1])MinMaxScalar.fit_transform(X) X:numpy array格式的數據[n_samples,n_features]返回值:轉換后的形狀相同的array

歸一化步驟
1、實例化MinMaxScalar
2、通過fit_transform轉換

演示:

from sklearn.preprocessing import MinMaxScalerdef mm():'''歸一化處理:return: None'''mm=MinMaxScaler()data=mm.fit_transform([[90,2,10,40],[60,4,15,45],[75,3,13,46]])print(data)if __name__=='__main__':mm()


這種歸一化比較適用在數值較集中的情況。這種方法有一個缺陷,異常點對最值影響太大,如果max和min不穩定的時候,很容易使得歸一化的結果不穩定,影響后續使用效果。其實在實際應用中,一般用經驗常量來替代max和min。
對于歸一化來說:如果出現異常點,影響了最大值和最小值,那么結果顯然會發生改變。

(2)標準差歸一化。
特點:通過對原始數據進行變換把數據變換到均值為0,方差為1范圍內。
也叫Z-score標準化,這種方法給予原始數據的均值(mean,μ)和標準差(standard deviation,σ)進行數據的標準化。經過處理后的數據符合標準正態分布,即均值為0,標準差為1,轉化函數為:



StandardScaler語法

StandardScaler(…)處理之后每列來說所有數據都聚集在均值0附近標準差為1StandardScaler.fit_transform(X,y) X:numpy array格式的數據[n_samples,n_features]返回值:轉換后的形狀相同的arrayStandardScaler.mean_原始數據中每列特征的平均值StandardScaler.std_原始數據每列特征的方差

標準化步驟
1、實例化StandardScaler
2、通過fit_transform轉換

演示:

from sklearn.preprocessing import StandardScalerdef stand():'''標準化縮放:return:'''std=StandardScaler()data=std.fit_transform([[ 1., -1., 3.],[ 2., 4., 2.],[ 4., 6., -1.]])print(data)return Noneif __name__=='__main__':stand()


對于標準化來說:如果出現異常點,由于具有一定數據量,少量的異常點對于平均值的影響并不大,從而方差改變較小。

(3)缺失值
如何處理數據中的缺失值?

Imputer語法

Imputer(missing_values='NaN', strategy='mean', axis=0)完成缺失值插補Imputer.fit_transform(X,y) X:numpy array格式的數據[n_samples,n_features]返回值:轉換后的形狀相同的array

Imputer流程
1、初始化Imputer,指定”缺失值”,指定填補策略,指定行或列
注:缺失值也可以是別的指定要替換的值
2、調用fit_transform

演示:

from sklearn.preprocessing import Imputer import numpy as npdef im():'''缺失值處理:return:'''im=Imputer(missing_values='NaN',strategy='mean',axis=0)data=im.fit_transform([[1, 2], [np.nan, 3], [7, 6]])print(data)return Noneif __name__=='__main__':im()

關于np.nan(np.NaN)
1、 numpy的數組中可以使用np.nan/np.NaN來代替缺失值,屬于float類型。
2、如果是文件中的一些缺失值,可以替換成nan,通過np.array轉化成float型的數組即可。

(4)非線性歸一化,這種方法一般使用在數據分析比較大的場景,有些數值很大,有些很小,通過一些數學函數,將原始值進行映射。一般使用的函數包括log、指數、正切等,需要根據數據分布的具體情況來決定非線性函數的曲線。

總結

以上是生活随笔為你收集整理的python人工智能——机器学习——特征工程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。