国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

機器學(xué)習(xí)基礎(chǔ)之《特征工程(2)—特征工程介紹、特征抽取》

這篇具有很好參考價值的文章主要介紹了機器學(xué)習(xí)基礎(chǔ)之《特征工程(2)—特征工程介紹、特征抽取》。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、什么是特征工程

機器學(xué)習(xí)領(lǐng)域的大神Andrew Ng(吳恩達)老師說“Coming up with features is difficult, time-consuming, requires expert knowledge. “Applied machine learning” is basically feature engineering. ”
注:業(yè)界廣泛流傳:數(shù)據(jù)和特征決定了機器學(xué)習(xí)的上限,而模型和算法只是逼近這個上限而已

特征工程是使用專業(yè)背景知識和技巧處理數(shù)據(jù),使得特征能在機器學(xué)習(xí)算法上發(fā)揮更好的作用的過程
意義:會直接影響機器學(xué)習(xí)的效果

二、用什么做特征工程

目前就是sklearn

三、特征工程的位置與數(shù)據(jù)處理的比較

1、pandas
一個數(shù)據(jù)讀取非常方便以及基本的處理格式的工具

2、sklearn
對于特征的處理提供了強大的接口

3、特征工程包含內(nèi)容
(1)特征抽取
(2)特征預(yù)處理
(3)特征降維

4、特征抽取/特征提取
比如有一篇英文短文,要對文章進行分類:
機器學(xué)習(xí)算法 -- 統(tǒng)計方法 -- 數(shù)學(xué)公式
數(shù)學(xué)公式不能處理字符串,要把文本字符串轉(zhuǎn)換成數(shù)值的類型
問題:文本類型轉(zhuǎn)換成數(shù)值怎么轉(zhuǎn)?
機器學(xué)習(xí)基礎(chǔ)之《特征工程(2)—特征工程介紹、特征抽取》,機器學(xué)習(xí),機器學(xué)習(xí)

分類船倉位
問題:類型轉(zhuǎn)換成數(shù)值?
onehot編碼或者啞變量
機器學(xué)習(xí)基礎(chǔ)之《特征工程(2)—特征工程介紹、特征抽取》,機器學(xué)習(xí),機器學(xué)習(xí)

四、特征提取

1、什么是特征提取
將任意數(shù)據(jù)(如文本或圖像)轉(zhuǎn)換為可用于機器學(xué)習(xí)的數(shù)字特征
注:特征值化是為了計算機更好的去理解數(shù)據(jù)
(1)字典特征提取(特征離散化)
(2)文本特征提取
(3)圖像特征提?。ㄉ疃葘W(xué)習(xí)將介紹)

2、特征提取API
sklearn.feature_extraction

五、字典的特征提取

sklearn.feature_extraction.DictVectorizer(sparse=True, ...)
作用:對字段數(shù)據(jù)進行特征值化

說明:
vector 數(shù)學(xué)里是向量,物理里是矢量
matrix 矩陣,二維數(shù)組
如果將向量存儲在計算機中,可以用一維數(shù)組來存儲

1、DicVectorizer.fit_transform(X)
X:字段或者包含字典的迭代器
返回值:返回sparse矩陣

2、DicVectorizer.inverse_transform(X)
X:array數(shù)組或者sparse矩陣
返回值:轉(zhuǎn)換之前數(shù)據(jù)格式

3、DicVectorizer.get_feature_names()
返回值:返回類別名稱

4、例子
我們對以下數(shù)據(jù)進行特征提取

[{'city': '北京','temperature':100}
{'city': '上海','temperature':60}
{'city': '深圳','temperature':30}]

機器學(xué)習(xí)基礎(chǔ)之《特征工程(2)—特征工程介紹、特征抽取》,機器學(xué)習(xí),機器學(xué)習(xí)

上面一行代表feature_names,下面三行就是data
解釋一下,如果有三個城市就有3個0,字典排列順序是幾第幾個0就變成1,有點像二進制編碼
樣本是一個三行兩列的矩陣,當(dāng)進行字典特征抽取之后,樣本量變成4列了
把城市類別轉(zhuǎn)換成了one-hot編碼

5、修改day01_machine_learning.py

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer

def datasets_demo():
    """
    sklearn數(shù)據(jù)集使用
    """
    #獲取數(shù)據(jù)集
    iris = load_iris()
    print("鳶尾花數(shù)據(jù)集:\n", iris)
    print("查看數(shù)據(jù)集描述:\n", iris["DESCR"])
    print("查看特征值的名字:\n", iris.feature_names)
    print("查看特征值幾行幾列:\n", iris.data.shape)
   
    #數(shù)據(jù)集的劃分
    x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=22)
    print("訓(xùn)練集的特征值:\n", x_train, x_train.shape)

    return None

def dict_demo():
    """
    字典特征抽取
    """
    data = [{'city': '北京','temperature':100},{'city': '上海','temperature':60},{'city': '深圳','temperature':30}]
    # 1、實例化一個轉(zhuǎn)換器類
    transfer = DictVectorizer()

    # 2、調(diào)用fit_transform()
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new)

    return None

if __name__ == "__main__":
    # 代碼1:sklearn數(shù)據(jù)集使用
    #datasets_demo()
    # 代碼2:字典特征抽取
    dict_demo()

運行結(jié)果:

data_new:
   (0, 1)	1.0
  (0, 3)	100.0
  (1, 0)	1.0
  (1, 3)	60.0
  (2, 2)	1.0
  (2, 3)	30.0

為什么是這個結(jié)果:
這個API將X傳進來之后,返回sparse矩陣(sparse英文是稀疏的意思,就是稀疏矩陣)
如果設(shè)置:transfer = DictVectorizer(sparse=False)
就會得到預(yù)想的結(jié)果:

data_new:
 [[  0.   1.   0. 100.]
 [  1.   0.   0.  60.]
 [  0.   0.   1.  30.]]

怎么看稀疏矩陣:某些矩陣中,非0元素遠少于0元素。典型存儲方法:三元組法,(行,列,元素值)
就是標(biāo)注了稀疏矩陣中的非零元素的位置以及對應(yīng)的值,通俗點講:0行1列的數(shù)值是1,在預(yù)想結(jié)果里就能找到
好處是節(jié)省內(nèi)存,提高加載效率

增加打印特征名:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer

def datasets_demo():
    """
    sklearn數(shù)據(jù)集使用
    """
    #獲取數(shù)據(jù)集
    iris = load_iris()
    print("鳶尾花數(shù)據(jù)集:\n", iris)
    print("查看數(shù)據(jù)集描述:\n", iris["DESCR"])
    print("查看特征值的名字:\n", iris.feature_names)
    print("查看特征值幾行幾列:\n", iris.data.shape)
   
    #數(shù)據(jù)集的劃分
    x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=22)
    print("訓(xùn)練集的特征值:\n", x_train, x_train.shape)

    return None
 
def dict_demo():
    """
    字典特征抽取
    """
    data = [{'city': '北京','temperature':100},{'city': '上海','temperature':60},{'city': '深圳','temperature':30}]
    # 1、實例化一個轉(zhuǎn)換器類
    transfer = DictVectorizer(sparse=False)

    # 2、調(diào)用fit_transform()
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new)
    print("特征名字:\n", transfer.get_feature_names())

    return None

if __name__ == "__main__":
    # 代碼1:sklearn數(shù)據(jù)集使用
    #datasets_demo()
    # 代碼2:字典特征抽取
    dict_demo()
data_new:
 [[  0.   1.   0. 100.]
 [  1.   0.   0.  60.]
 [  0.   0.   1.  30.]]
特征名字:
 ['city=上海', 'city=北京', 'city=深圳', 'temperature']

六、文本特征提取

1、作用
對文本數(shù)據(jù)進行特征值化
單詞作為特征,特征詞

2、方法一:CountVectorizer
sklearn.feature_extraction.text.CountVectorizer(stop_words=[])
返回值:返回詞頻矩陣

3、CountVectorizer.fit_transform(X)
X:文本或者包含文本字符串的可迭代對象
返回值:返回sparse矩陣

4、CountVectorizer.inverse_transform(X)
X:array數(shù)組或者sparse矩陣
返回值:轉(zhuǎn)換之前的數(shù)據(jù)格式

5、CountVectorizer.get_feature_names()
返回值:單詞列表

6、例子
我們對一下數(shù)據(jù)進行特征提取

["life is short,i like python",
"life is too long,i dislike python"]

機器學(xué)習(xí)基礎(chǔ)之《特征工程(2)—特征工程介紹、特征抽取》,機器學(xué)習(xí),機器學(xué)習(xí)

為什么沒有i,因為api設(shè)計的時候認為單詞做分類或情感分析意義不大

7、修改day01_machine_learning.py

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer
from sklearn.feature_extraction.text import CountVectorizer

def datasets_demo():
    """
    sklearn數(shù)據(jù)集使用
    """
    #獲取數(shù)據(jù)集
    iris = load_iris()
    print("鳶尾花數(shù)據(jù)集:\n", iris)
    print("查看數(shù)據(jù)集描述:\n", iris["DESCR"])
    print("查看特征值的名字:\n", iris.feature_names)
    print("查看特征值幾行幾列:\n", iris.data.shape)
   
    #數(shù)據(jù)集的劃分
    x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=22)
    print("訓(xùn)練集的特征值:\n", x_train, x_train.shape)

    return None
 
def dict_demo():
    """
    字典特征抽取
    """
    data = [{'city': '北京','temperature':100},{'city': '上海','temperature':60},{'city': '深圳','temperature':30}]
    # 1、實例化一個轉(zhuǎn)換器類
    transfer = DictVectorizer(sparse=False)

    # 2、調(diào)用fit_transform()
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new)
    print("特征名字:\n", transfer.get_feature_names())

    return None

def count_demo():
    """
    文本特征抽取
    """
    data = ["life is short,i like like python", "life is too long,i dislike python"]
    # 1、實例化一個轉(zhuǎn)換器類
    transfer = CountVectorizer()
    # 2、調(diào)用fit_transform()
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new.toarray())
    print("特征名字:\n", transfer.get_feature_names()) 

    return None


if __name__ == "__main__":
    # 代碼1:sklearn數(shù)據(jù)集使用
    #datasets_demo()
    # 代碼2:字典特征抽取
    #dict_demo()
    # 代碼3:文本特征抽取
    count_demo()

運行結(jié)果:

data_new:
 [[0 1 1 2 0 1 1 0]
 [1 1 1 0 1 1 0 1]]
特征名字:
 ['dislike', 'is', 'life', 'like', 'long', 'python', 'short', 'too']

統(tǒng)計每個樣本特征詞出現(xiàn)的個數(shù)

8、中文文本特征抽取

問題:如果我們將數(shù)據(jù)替換成中文?
那么得到的結(jié)果是把整句作為了一個詞,手工打空格則不支持單個中文詞!

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer
from sklearn.feature_extraction.text import CountVectorizer

def datasets_demo():
    """
    sklearn數(shù)據(jù)集使用
    """
    #獲取數(shù)據(jù)集
    iris = load_iris()
    print("鳶尾花數(shù)據(jù)集:\n", iris)
    print("查看數(shù)據(jù)集描述:\n", iris["DESCR"])
    print("查看特征值的名字:\n", iris.feature_names)
    print("查看特征值幾行幾列:\n", iris.data.shape)
   
    #數(shù)據(jù)集的劃分
    x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=22)
    print("訓(xùn)練集的特征值:\n", x_train, x_train.shape)

    return None
 
def dict_demo():
    """
    字典特征抽取
    """
    data = [{'city': '北京','temperature':100},{'city': '上海','temperature':60},{'city': '深圳','temperature':30}]
    # 1、實例化一個轉(zhuǎn)換器類
    transfer = DictVectorizer(sparse=False)

    # 2、調(diào)用fit_transform()
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new)
    print("特征名字:\n", transfer.get_feature_names())

    return None

def count_demo():
    """
    文本特征抽取
    """
    data = ["life is short,i like like python", "life is too long,i dislike python"]
    # 1、實例化一個轉(zhuǎn)換器類
    transfer = CountVectorizer()
    # 2、調(diào)用fit_transform()
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new.toarray())
    print("特征名字:\n", transfer.get_feature_names()) 

    return None

def count_chinese_demo():
    """
    中文文本特征抽取
    """
    data = ["我 愛 北京 天安門", "天安門 上 太陽 升"]
    # 1、實例化一個轉(zhuǎn)換器類
    transfer = CountVectorizer()
    
    # 2、調(diào)用fit_transform
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new.toarray());
    print("特征名字:\n", transfer.get_feature_names())
    
    return None

if __name__ == "__main__":
    # 代碼1:sklearn數(shù)據(jù)集使用
    #datasets_demo()
    # 代碼2:字典特征抽取
    #dict_demo()
    # 代碼3:文本特征抽取
    #count_demo()
    # 代碼4:中文文本特征抽取
    count_chinese_demo()

運行結(jié)果:

data_new:
 [[1 1 0]
 [0 1 1]]
特征名字:
 ['北京', '天安門', '太陽']

9、CountVectorizer的stop_words
stop_words:停用詞
我們認為有一些詞對最終分類沒有好處的,可以搜索停用詞表

10、對以下三句話進行特征值化

今天很殘酷,明天更殘酷,后天很美好,
但絕對大部分是死在明天晚上,所以每個人不要放棄今天。

我們看到的從很遠星系來的光是在幾百萬年前之前發(fā)出的,
這樣當(dāng)我們看到宇宙時,我們是在看它的過去。

如果只用一種方式了解某樣事物,你就不會真正了解它。
了解事物真正含義的秘密取決于如何將其與我們所了解的事物相聯(lián)系。

(1)準(zhǔn)備句子,利用jieba.cut進行分詞,安裝庫:pip3 install jieba
(2)實例化CountVectorizer
(3)將分詞結(jié)果變成字符串當(dāng)做fit_transform的輸入值

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer
from sklearn.feature_extraction.text import CountVectorizer
import jieba

def datasets_demo():
    """
    sklearn數(shù)據(jù)集使用
    """
    #獲取數(shù)據(jù)集
    iris = load_iris()
    print("鳶尾花數(shù)據(jù)集:\n", iris)
    print("查看數(shù)據(jù)集描述:\n", iris["DESCR"])
    print("查看特征值的名字:\n", iris.feature_names)
    print("查看特征值幾行幾列:\n", iris.data.shape)
   
    #數(shù)據(jù)集的劃分
    x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=22)
    print("訓(xùn)練集的特征值:\n", x_train, x_train.shape)

    return None
 
def dict_demo():
    """
    字典特征抽取
    """
    data = [{'city': '北京','temperature':100},{'city': '上海','temperature':60},{'city': '深圳','temperature':30}]
    # 1、實例化一個轉(zhuǎn)換器類
    transfer = DictVectorizer(sparse=False)

    # 2、調(diào)用fit_transform()
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new)
    print("特征名字:\n", transfer.get_feature_names())

    return None

def count_demo():
    """
    文本特征抽取
    """
    data = ["life is short,i like like python", "life is too long,i dislike python"]
    # 1、實例化一個轉(zhuǎn)換器類
    transfer = CountVectorizer()
    # 2、調(diào)用fit_transform()
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new.toarray())
    print("特征名字:\n", transfer.get_feature_names()) 

    return None

def count_chinese_demo():
    """
    中文文本特征抽取
    """
    data = ["我 愛 北京 天安門", "天安門 上 太陽 升"]
    # 1、實例化一個轉(zhuǎn)換器類
    transfer = CountVectorizer()
    
    # 2、調(diào)用fit_transform
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new.toarray());
    print("特征名字:\n", transfer.get_feature_names())
    
    return None

def cut_word(text):
    """
    進行中文分詞
    """
    return " ".join(list(jieba.cut(text)))  #返回一個分詞生成器對象,強轉(zhuǎn)成list,再join轉(zhuǎn)成字符串

def count_chinese_demo2():
    """
    中文文本特征抽取,自動分詞
    """
    # 1、將中文文本進行分詞
    data = ["今天很殘酷,明天更殘酷,后天很美好,但絕對大部分是死在明天晚上,所以每個人不要放棄今天。",
        "我們看到的從很遠星系來的光是在幾百萬年前之前發(fā)出的,這樣當(dāng)我們看到宇宙時,我們是在看它的過去。",
        "如果只用一種方式了解某樣事物,你就不會真正了解它。了解事物真正含義的秘密取決于如何將其與我們所了解的事物相聯(lián)系。"]

    data_new = []
    for sent in data:
        data_new.append(cut_word(sent))
    print(data_new)
    # 2、實例化一個轉(zhuǎn)換器類
    transfer = CountVectorizer()
    # 3、調(diào)用fit_transform()
    data_final = transfer.fit_transform(data_new)
    print("data_final:\n", data_final.toarray())
    print("特征名字:\n", transfer.get_feature_names())
    return None

if __name__ == "__main__":
    # 代碼1:sklearn數(shù)據(jù)集使用
    #datasets_demo()
    # 代碼2:字典特征抽取
    #dict_demo()
    # 代碼3:文本特征抽取
    #count_demo()
    # 代碼4:中文文本特征抽取
    #count_chinese_demo()
    # 代碼5:中文文本特征抽取,自動分詞
    count_chinese_demo2()
    # 代碼6: 測試jieba庫中文分詞
    #print(cut_word("我愛北京天安門"))

執(zhí)行結(jié)果:

Building prefix dict from the default dictionary ...
Loading model from cache /tmp/jieba.cache
Loading model cost 1.304 seconds.
Prefix dict has been built successfully.
['今天 很 殘酷 , 明天 更 殘酷 , 后天 很 美好 , 但 絕對 大部分 是 死 在 明天 晚上 , 所以 每個 人 不要 放棄 今天 。', '我們 看到 的 從 很 遠 星系 來 的 光是在 幾百萬年 前 之前 發(fā)出 的 , 這樣 當(dāng) 我們 看到 宇宙 時 , 我們 是 在 看 它 的 過去 。', '如果 只用 一種 方式 了解 某樣 事物 , 你 就 不會 真正 了解 它 。 了解 事物 真正 含義 的 秘密 取決于 如何 將 其 與 我們 所 了解 的 事物 相 聯(lián)系 。']
data_final:
 [[0 0 1 0 0 0 2 0 0 0 0 0 1 0 1 0 0 0 0 1 1 0 2 0 1 0 2 1 0 0 0 1 1 0 0 0]
 [0 0 0 1 0 0 0 1 1 1 0 0 0 0 0 0 0 1 3 0 0 0 0 1 0 0 0 0 2 0 0 0 0 0 1 1]
 [1 1 0 0 4 3 0 0 0 0 1 1 0 1 0 1 1 0 1 0 0 1 0 0 0 1 0 0 0 2 1 0 0 1 0 0]]
特征名字:
 ['一種', '不會', '不要', '之前', '了解', '事物', '今天', '光是在', '幾百萬年', '發(fā)出', '取決于', '只用', '后天', '含義', '大部分', '如何', '如果', '宇宙', '我們', '所以', '放棄', '方式', '明天', '星系', '晚上', '某樣', '殘酷', '每個', '看到', '真正', '秘密', '絕對', '美好', '聯(lián)系', '過去', '這樣']

這種方式是根據(jù)一個詞,在一篇文章中出現(xiàn)的次數(shù)來分類的。但是像一些詞“我們”、“你們”等在所有文章都出現(xiàn)很多次,我們更希望的是在某一個類別的文章中,出現(xiàn)的次數(shù)很多,但是在其他類別的文章中出現(xiàn)很少,這樣的詞更有利于我們分類。
要找到這種關(guān)鍵詞。引出了TfidfVectorizer

11、方法二:TfidfVectorizer
sklearn.feature_extraction.text.TfidfVectorizer

12、Tf-idf文本特征提取
(1)TF-IDF的主要思想是:如果某個詞或短語在一篇文章中出現(xiàn)的概率高,并且在其他文章中很少出現(xiàn),則認為此詞或者短語具有很好的類別區(qū)分能力,適合用來分類
(2)TF-IDF作用:用以評估一字詞對于一個文件集或一個語料庫中的其中一份文件的重要程度。

13、Tf-idf公式
(1)詞頻(term frequency,tf)指的是某一個給定的詞語在該文件中出現(xiàn)的頻率
(2)逆向文檔頻率(inverse document frequency,idf)是一個詞語普遍重要性的度量。某一特定詞語的idf,可以由總文件數(shù)目除以包含該詞語之文件的數(shù)目,再將得到的商取以10為底的對數(shù)得到
(3)最終得出結(jié)果可以理解為重要程度
機器學(xué)習(xí)基礎(chǔ)之《特征工程(2)—特征工程介紹、特征抽取》,機器學(xué)習(xí),機器學(xué)習(xí)

注:假如一篇文件的總詞語數(shù)是100個,而詞語"非常"出現(xiàn)了5次,那么"非常"一詞在該文件中的詞頻就是5/100=0.05。而計算文件頻率(IDF)的方法是以文件集的文件總數(shù),除以出現(xiàn)"非常"一詞的文件數(shù)。所以,如果"非常"一詞在1,000份文件出現(xiàn)過,而文件總數(shù)是10,000,000份的話,其逆向文件頻率就是lg(10,000,000 / 1,0000)=3。最后"非常"對于這篇文檔的tf-idf的分?jǐn)?shù)為0.05 * 3=0.15

14、Tf-idf表示重要程度
兩個詞:經(jīng)濟、非常
1000篇文章 -- 語料庫
100篇文章 -- 非常
10篇文章 -- 經(jīng)濟
兩篇文章
文章A(100詞):10次經(jīng)濟
? ? tf:10 / 100 = 0.1
? ? idf:log 10 (1000 / 10) = 2
? ? tf-idf:0.2
文章B(100詞):10次非常
? ? tf:10 / 100 = 0.1
? ? idf:log 10 (1000 / 100) = 1
? ? tf-idf:0.1
? ? 對數(shù)?
? ? ? ? 2 ^ 3 = 8
? ? ? ? log 2 (8) = 3
? ? ? ? log 10 (10) = 1

15、API
sklearn.feature_extraction.text.TfidfVectorizer(stop_words=None,...)
返回值:返回詞的權(quán)重矩陣

16、TfidfVectorizer.fit_transform(X)
X:文本或者包含文本字符串的可迭代對象
返回值:返回sparse矩陣

17、TfidfVectorizer.inverse_transform(X)
X:array數(shù)組或者sparse矩陣
返回值:轉(zhuǎn)換之前數(shù)據(jù)格式

18、TfidfVectorizer.get_feature_names()
返回值:單詞列表

19、用tfidf進行特征抽取

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
import jieba

def datasets_demo():
    """
    sklearn數(shù)據(jù)集使用
    """
    #獲取數(shù)據(jù)集
    iris = load_iris()
    print("鳶尾花數(shù)據(jù)集:\n", iris)
    print("查看數(shù)據(jù)集描述:\n", iris["DESCR"])
    print("查看特征值的名字:\n", iris.feature_names)
    print("查看特征值幾行幾列:\n", iris.data.shape)
   
    #數(shù)據(jù)集的劃分
    x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=22)
    print("訓(xùn)練集的特征值:\n", x_train, x_train.shape)

    return None
 
def dict_demo():
    """
    字典特征抽取
    """
    data = [{'city': '北京','temperature':100},{'city': '上海','temperature':60},{'city': '深圳','temperature':30}]
    # 1、實例化一個轉(zhuǎn)換器類
    transfer = DictVectorizer(sparse=False)

    # 2、調(diào)用fit_transform()
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new)
    print("特征名字:\n", transfer.get_feature_names())

    return None

def count_demo():
    """
    文本特征抽取
    """
    data = ["life is short,i like like python", "life is too long,i dislike python"]
    # 1、實例化一個轉(zhuǎn)換器類
    transfer = CountVectorizer()
    # 2、調(diào)用fit_transform()
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new.toarray())
    print("特征名字:\n", transfer.get_feature_names()) 

    return None

def count_chinese_demo():
    """
    中文文本特征抽取
    """
    data = ["我 愛 北京 天安門", "天安門 上 太陽 升"]
    # 1、實例化一個轉(zhuǎn)換器類
    transfer = CountVectorizer()
    
    # 2、調(diào)用fit_transform
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new.toarray());
    print("特征名字:\n", transfer.get_feature_names())
    
    return None

def cut_word(text):
    """
    進行中文分詞
    """
    return " ".join(list(jieba.cut(text)))  #返回一個分詞生成器對象,強轉(zhuǎn)成list,再join轉(zhuǎn)成字符串

def count_chinese_demo2():
    """
    中文文本特征抽取,自動分詞
    """
    # 1、將中文文本進行分詞
    data = ["今天很殘酷,明天更殘酷,后天很美好,但絕對大部分是死在明天晚上,所以每個人不要放棄今天。",
        "我們看到的從很遠星系來的光是在幾百萬年前之前發(fā)出的,這樣當(dāng)我們看到宇宙時,我們是在看它的過去。",
        "如果只用一種方式了解某樣事物,你就不會真正了解它。了解事物真正含義的秘密取決于如何將其與我們所了解的事物相聯(lián)系。"]

    data_new = []
    for sent in data:
        data_new.append(cut_word(sent))
    print(data_new)
    # 2、實例化一個轉(zhuǎn)換器類
    transfer = CountVectorizer()
    # 3、調(diào)用fit_transform()
    data_final = transfer.fit_transform(data_new)
    print("data_final:\n", data_final.toarray())
    print("特征名字:\n", transfer.get_feature_names())
    return None

def tfidf_demo():
    """
    用tf-idf的方法進行文本特征抽取
    """
    # 1、將中文文本進行分詞
    data = ["今天很殘酷,明天更殘酷,后天很美好,但絕對大部分是死在明天晚上,所以每個人不要放棄今天。",
        "我們看到的從很遠星系來的光是在幾百萬年前之前發(fā)出的,這樣當(dāng)我們看到宇宙時,我們是在看它的過去。",
        "如果只用一種方式了解某樣事物,你就不會真正了解它。了解事物真正含義的秘密取決于如何將其與我們所了解的事物相聯(lián)系。"]

    data_new = []
    for sent in data:
        data_new.append(cut_word(sent))
    print(data_new)
    # 2、實例化一個轉(zhuǎn)換器類
    transfer = TfidfVectorizer()
    # 3、調(diào)用fit_transform()
    data_final = transfer.fit_transform(data_new)
    print("data_final:\n", data_final.toarray())
    print("特征名字:\n", transfer.get_feature_names())
    return None

if __name__ == "__main__":
    # 代碼1:sklearn數(shù)據(jù)集使用
    #datasets_demo()
    # 代碼2:字典特征抽取
    #dict_demo()
    # 代碼3:文本特征抽取
    #count_demo()
    # 代碼4:中文文本特征抽取
    #count_chinese_demo()
    # 代碼5:中文文本特征抽取,自動分詞
    #count_chinese_demo2()
    # 代碼6: 測試jieba庫中文分詞
    #print(cut_word("我愛北京天安門"))
    # 代碼7:用tf-idf的方法進行文本特征抽取
    tfidf_demo()

執(zhí)行結(jié)果:

Building prefix dict from the default dictionary ...
Loading model from cache /tmp/jieba.cache
Loading model cost 1.415 seconds.
Prefix dict has been built successfully.
['今天 很 殘酷 , 明天 更 殘酷 , 后天 很 美好 , 但 絕對 大部分 是 死 在 明天 晚上 , 所以 每個 人 不要 放棄 今天 。', '我們 看到 的 從 很 遠 星系 來 的 光是在 幾百萬年 前 之前 發(fā)出 的 , 這樣 當(dāng) 我們 看到 宇宙 時 , 我們 是 在 看 它 的 過去 。', '如果 只用 一種 方式 了解 某樣 事物 , 你 就 不會 真正 了解 它 。 了解 事物 真正 含義 的 秘密 取決于 如何 將 其 與 我們 所 了解 的 事物 相 聯(lián)系 。']
data_final:
 [[0.         0.         0.21821789 0.         0.         0.
  0.43643578 0.         0.         0.         0.         0.
  0.21821789 0.         0.21821789 0.         0.         0.
  0.         0.21821789 0.21821789 0.         0.43643578 0.
  0.21821789 0.         0.43643578 0.21821789 0.         0.
  0.         0.21821789 0.21821789 0.         0.         0.        ]
 [0.         0.         0.         0.2410822  0.         0.
  0.         0.2410822  0.2410822  0.2410822  0.         0.
  0.         0.         0.         0.         0.         0.2410822
  0.55004769 0.         0.         0.         0.         0.2410822
  0.         0.         0.         0.         0.48216441 0.
  0.         0.         0.         0.         0.2410822  0.2410822 ]
 [0.15698297 0.15698297 0.         0.         0.62793188 0.47094891
  0.         0.         0.         0.         0.15698297 0.15698297
  0.         0.15698297 0.         0.15698297 0.15698297 0.
  0.1193896  0.         0.         0.15698297 0.         0.
  0.         0.15698297 0.         0.         0.         0.31396594
  0.15698297 0.         0.         0.15698297 0.         0.        ]]
特征名字:
 ['一種', '不會', '不要', '之前', '了解', '事物', '今天', '光是在', '幾百萬年', '發(fā)出', '取決于', '只用', '后天', '含義', '大部分', '如何', '如果', '宇宙', '我們', '所以', '放棄', '方式', '明天', '星系', '晚上', '某樣', '殘酷', '每個', '看到', '真正', '秘密', '絕對', '美好', '聯(lián)系', '過去', '這樣']

20、Tf-idf的重要性
分類機器學(xué)習(xí)算法進行文章分類中前期數(shù)據(jù)處理方式
?文章來源地址http://www.zghlxwxcb.cn/news/detail-534710.html

到了這里,關(guān)于機器學(xué)習(xí)基礎(chǔ)之《特征工程(2)—特征工程介紹、特征抽取》的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 特征抽取-----機器學(xué)習(xí)pycharm軟件

    特征抽取-----機器學(xué)習(xí)pycharm軟件

    部分效果展示: 效果展示: 效果展示: 什么抽取都寫成了方法需要調(diào)用才可以輸出,輸出效果如“效果展示”所示

    2024年01月25日
    瀏覽(13)
  • 機器學(xué)習(xí)基礎(chǔ) 數(shù)據(jù)集、特征工程、特征預(yù)處理、特征選擇 7.27

    無量綱化 1.標(biāo)準(zhǔn)化 2.歸一化 信息數(shù)據(jù)化 1.特征二值化 2. Ont-hot編碼 3.缺失數(shù)據(jù)補全 1.方差選擇法 2.相關(guān)系數(shù)法

    2024年02月14日
    瀏覽(32)
  • 【機器學(xué)習(xí)】特征工程 - 字典特征提取

    「作者主頁」: 士別三日wyx 「作者簡介」: CSDN top100、阿里云博客專家、華為云享專家、網(wǎng)絡(luò)安全領(lǐng)域優(yōu)質(zhì)創(chuàng)作者 「推薦專欄」: 對網(wǎng)絡(luò)安全感興趣的小伙伴可以關(guān)注專欄《網(wǎng)絡(luò)安全入門到精通》 特征工程就是從 「原始數(shù)據(jù)」 中提取 「特征」 ,以供 「算法」 和 「模型

    2024年02月11日
    瀏覽(29)
  • 機器學(xué)習(xí):特征工程之特征預(yù)處理

    機器學(xué)習(xí):特征工程之特征預(yù)處理

    目錄 特征預(yù)處理 1、簡述 2、內(nèi)容 3、歸一化 3.1、魯棒性 3.2、存在的問題 4、標(biāo)準(zhǔn)化 ?所屬專欄:人工智能 文中提到的代碼如有需要可以私信我發(fā)給你?? 什么是特征預(yù)處理:scikit-learn的解釋: provides several common utility functions and transformer classes to change raw feature vectors into a r

    2024年02月12日
    瀏覽(36)
  • 【機器學(xué)習(xí)】特征工程 - 文本特征提取TfidfVectorizer

    「作者主頁」: 士別三日wyx 「作者簡介」: CSDN top100、阿里云博客專家、華為云享專家、網(wǎng)絡(luò)安全領(lǐng)域優(yōu)質(zhì)創(chuàng)作者 「推薦專欄」: 對網(wǎng)絡(luò)安全感興趣的小伙伴可以關(guān)注專欄《網(wǎng)絡(luò)安全入門到精通》 對 「文本」 進行特征提取時,一般會用 「單詞」 作為特征,即特征詞。

    2024年02月12日
    瀏覽(29)
  • python機器學(xué)習(xí)——機器學(xué)習(xí)相關(guān)概念 & 特征工程

    python機器學(xué)習(xí)——機器學(xué)習(xí)相關(guān)概念 & 特征工程

    監(jiān)督學(xué)習(xí):輸入數(shù)據(jù)有特征有標(biāo)簽,即有標(biāo)準(zhǔn)答案 分類:k-近鄰算法、貝葉斯分類、決策樹與隨機森林、邏輯回歸、神經(jīng)網(wǎng)絡(luò) 回歸:線性回歸、嶺回歸 標(biāo)注:隱馬爾可夫模型 (不做要求) 無監(jiān)督學(xué)習(xí):輸入數(shù)據(jù)有特征無標(biāo)簽,即無標(biāo)準(zhǔn)答案 聚類:k-means 特征工程是將原始數(shù)據(jù)

    2024年02月11日
    瀏覽(18)
  • 機器學(xué)習(xí)特征工程學(xué)習(xí)筆記(一)

    ????????機器學(xué)習(xí)特征工程是指在機器學(xué)習(xí)任務(wù)中對原始數(shù)據(jù)進行轉(zhuǎn)換、提取和選擇,以創(chuàng)建更有效、更具有表征能力的特征的過程。良好的特征工程可以顯著提升模型的性能,并幫助解決數(shù)據(jù)中存在的各種問題。 ????????以下是一些常見的機器學(xué)習(xí)特征工程技術(shù):

    2024年02月11日
    瀏覽(22)
  • 機器學(xué)習(xí)7:特征工程

    在傳統(tǒng)的軟件工程中,核心是代碼,然而,在機器學(xué)習(xí)項目中,重點則是特征——也就是說,開發(fā)人員優(yōu)化模型的方法之一是增加和改進其輸入特征。很多時候,優(yōu)化特征比優(yōu)化模型帶來的增益要大得多。 筆者曾經(jīng)參與過一個“商品推薦”的項目,在項目中,筆者發(fā)現(xiàn)商品的

    2024年02月11日
    瀏覽(27)
  • 機器學(xué)習(xí) 特征工程

    機器學(xué)習(xí) 特征工程

    特征工程就是將原始數(shù)據(jù)空間映射到新的特征向量空間,使得在新的特征空間中,模型能夠更好地學(xué)習(xí)數(shù)據(jù)中的規(guī)律。如果特征工程做的足夠好,即使是簡單的模型,也能表現(xiàn)出非常好的效果。而復(fù)雜的模型可以在一定程度上減少特征工程的工作量。例如,對于線性模型,我

    2023年04月19日
    瀏覽(36)
  • 機器學(xué)習(xí)-特征工程

    機器學(xué)習(xí)-特征工程

    1.1 什么是特征 數(shù)值特征(連續(xù)特征)、文本特征(離散特征) 1.2 特征的種類 ?1.3 特征工程 特征是機器學(xué)習(xí)可疑直接使用的,模型和特征之間是一個循環(huán)過程; 實際上特征工程就是將原始數(shù)據(jù)處理成機器學(xué)習(xí)可以直接使用數(shù)據(jù)的過程; 特征工程,降噪、將特征轉(zhuǎn)化為數(shù)字

    2024年02月06日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包