機(jī)器學(xué)習(xí)概述、特征工程睡雇、Scikit-learn

先來拜見一下祖師爺(祖師爺真帥)

img

“人工智能之父” 艾倫.圖靈 圖靈測試(1950)

img

馬文·李·閔斯基(英語:Marvin Lee Minsky萌衬,1927年8月9日-2016年1月24日),科學(xué)家它抱,專長于認(rèn)知科學(xué)與人工智能領(lǐng)域秕豫,麻省理工學(xué)院人工智能實驗室的創(chuàng)始人之一,著有幾部人工智能和哲學(xué)方面的作品观蓄。1969年馁蒂,因為在人工智能領(lǐng)域的貢獻(xiàn),獲得圖靈獎蜘腌。

img
img
img
img

圖片藝術(shù)化 GAN神經(jīng)網(wǎng)絡(luò)

img

這就說明了Python天下第一
開個玩笑,語言只是工具饵隙,我寫Java的時候也說Java天下第一撮珠,
PHP才是世界上最好的語言

img

就這些書啊,我都沒有看過金矛,不過我還年輕芯急,以后我也不會看的。

什么是機(jī)器學(xué)習(xí)

機(jī)器學(xué)習(xí)是從數(shù)據(jù)中自動分析獲得規(guī)律(模型)驶俊,并利用規(guī)律對未知數(shù)據(jù)進(jìn)行預(yù)測

為什么需要機(jī)器學(xué)習(xí)

img

機(jī)器學(xué)習(xí)應(yīng)用場景

img

數(shù)據(jù)類型

  • 離散型數(shù)據(jù):由記錄不同類別個體的數(shù)目所得到的數(shù)據(jù)娶耍,又稱計數(shù)數(shù)據(jù),所有這些數(shù)據(jù)全部都是整數(shù)饼酿,而且不能再細(xì)分榕酒,也不能進(jìn)一步提高他 們的精確度胚膊。
  • 連續(xù)型數(shù)據(jù):變量可以在某個范圍內(nèi)取任一數(shù),即變量的取值可以是連續(xù)的想鹰,如紊婉,長度、時間辑舷、質(zhì)量值等喻犁,這類整數(shù)通常是非整數(shù),含有小數(shù)部分何缓。

注:只要記住一點(diǎn)肢础,離散型是區(qū)間內(nèi)不可分,連續(xù)型是區(qū)間內(nèi)可分

可用數(shù)據(jù)集

img
  • scikit-learn特點(diǎn):數(shù)據(jù)量較小碌廓、方便學(xué)習(xí)
  • UCI特點(diǎn):收錄了360個數(shù)據(jù)集传轰、覆蓋科學(xué)、生活氓皱、經(jīng)濟(jì)等領(lǐng)域 路召、數(shù)據(jù)量幾十萬
  • Kaggle特點(diǎn):大數(shù)據(jù)競賽平臺、80萬科學(xué)家波材、真實數(shù)據(jù)股淡、數(shù)據(jù)量巨大

常用數(shù)據(jù)集數(shù)據(jù)的結(jié)構(gòu)組成

結(jié)構(gòu):特征值+目標(biāo)值

img

注:有些數(shù)據(jù)集可以沒有目標(biāo)值

img

如何利用工具自己進(jìn)行對原始數(shù)據(jù)(非連續(xù)型)的處理?

數(shù)據(jù)的特征工程

特征工程是什么

特征工程是將原始數(shù)據(jù)轉(zhuǎn)換為更好地代表預(yù)測模型的潛在問題的特征的過程,從而提高了對未知數(shù)據(jù)的模型準(zhǔn)確性

特征工程的意義

直接影響模型的預(yù)測結(jié)果

Scikit-learn庫介紹

  • Python語言的機(jī)器學(xué)習(xí)工具
  • Scikit-learn包括許多知名的機(jī)器學(xué)習(xí)算法的實現(xiàn)
  • Scikit-learn文檔完善敛瓷,容易上手蚀瘸,豐富的API贪惹,使其在學(xué)術(shù)界頗受歡迎枫绅。

特征抽取

數(shù)據(jù)的特征抽取

特征抽取實例演示

from sklearn.feature_extraction.text import CountVectorizer

# 實例化CountVectorizer
vector = CountVectorizer()

# 調(diào)用fit_transform輸入并轉(zhuǎn)換數(shù)據(jù)
res = vector.fit_transform(["Life is short, you need python", "Life is too long, you did not need python"])

# 打印結(jié)果
print(vector.get_feature_names())
print(res.toarray())

運(yùn)行結(jié)果

['did', 'is', 'life', 'long', 'need', 'not', 'python', 'short', 'too', 'you']
[[0 1 1 0 1 0 1 1 0 1]
 [1 1 1 1 1 1 1 0 1 1]]

通過演示得出結(jié)論:

  • 特征抽取針對非連續(xù)型數(shù)據(jù)
  • 特征抽取對文本等進(jìn)行特征值化

注:特征值化是為了計算機(jī)更好的去理解數(shù)據(jù)

sklearn特征抽取API

sklearn.feature_extraction

字典特征抽取

作用:對字典數(shù)據(jù)進(jìn)行特征值化
類:sklearn.feature_extraction.DictVectorizer

DictVectorizer語法

DictVectorizer(sparse=True,…)

DictVectorizer.fit_transform(X)

  • X:字典或者包含字典的迭代器
  • 返回值:返回sparse矩陣

DictVectorizer.inverse_transform(X)

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

DictVectorizer.get_feature_names()

  • 返回類別名稱

DictVectorizer.transform(X)

  • 按照原先的標(biāo)準(zhǔn)轉(zhuǎn)換

流程

  1. 實例化類DictVectorizer
  2. 調(diào)用fit_transform方法輸入數(shù)據(jù)并轉(zhuǎn)換 注意返回格式
[{'city': '北京','temperature':100}
{'city': '上海','temperature':60}
{'city': '深圳','temperature':30}]
from sklearn.feature_extraction import DictVectorizer


def dictvec():
    """
    字典數(shù)據(jù)抽取
    :return:  None
    """
    # 實例化
    dict = DictVectorizer(sparse=False)

    # 調(diào)用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)


if __name__ == "__main__":
    dictvec()

運(yùn)行結(jié)果

['city=上海', 'city=北京', 'city=深圳', 'temperature']
[{'city=北京': 1.0, 'temperature': 100.0}, {'city=上海': 1.0, 'temperature': 60.0}, {'city=深圳': 1.0, 'temperature': 30.0}]
[[  0.   1.   0. 100.]
 [  1.   0.   0.  60.]
 [  0.   0.   1.  30.]]

字典數(shù)據(jù)抽认则颉:把字典中一些類別數(shù)據(jù)酬诀,分別進(jìn)行轉(zhuǎn)換成特征

數(shù)組形式,有類別的這些特征肴裙,先要轉(zhuǎn)換成字典數(shù)據(jù)

One-hot編碼

img
img

文本特征抽取

作用:對文本數(shù)據(jù)進(jìn)行特征值化

類:sklearn.feature_extraction.text.CountVectorizer

CountVectorizer語法

CountVectorizer(max_df=1.0,min_df=1,…) 返回詞頻矩陣

CountVectorizer.fit_transform(X,y)

  • X:文本或者包含文本字符串的可迭代對象
  • 返回值:返回sparse矩陣

CountVectorizer.inverse_transform(X)

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

CountVectorizer.get_feature_names()

  • 返回值:單詞列表

流程

  1. 實例化類CountVectorizer
  2. 調(diào)用fit_transform方法輸入數(shù)據(jù)并轉(zhuǎn)換
    注意返回格式,利用toarray()進(jìn)行sparse矩陣轉(zhuǎn)換array數(shù)組
["life is short,i like python",
"life is too long,i dislike python"]
from sklearn.feature_extraction.text import CountVectorizer

def countvex():
    """
    對文本進(jìn)行特征值化
    :return: None
    """
    cv = CountVectorizer()
    data = cv.fit_transform(["人生 苦短躬贡,你 需要 Python", "人生 漫長拂玻,你 不需要 Python"])
    # 統(tǒng)計所有文章當(dāng)中所有的詞雄右,重復(fù)的只看做一次  詞的列表
    print(cv.get_feature_names())
    # 對每篇文章纺讲,在詞的列表里面進(jìn)行統(tǒng)計每個詞出現(xiàn)的次數(shù) 單個字母不統(tǒng)計
    print(data.toarray())

    return None

if __name__ == "__main__":
    countvex()


['python', '不需要', '人生', '漫長', '苦短', '需要']
[[1 0 1 0 1 1]
 [1 1 1 1 0 0]]

文本特種抽榷谝佟:Count

文本分類熬甚、情感分析
對于單個英文字母不統(tǒng)計:沒有分類依據(jù)

中文需要空格才能進(jìn)行抽取肋坚,所以我們需要進(jìn)行分詞處理

這時候就需要jieba分詞乡括,如果是Python的Web項目,jieba分詞配合搜索引擎還是很常用的诲泌,跟ElasticSearch的ik分詞一個效果哀蘑。

案例:對三段話進(jìn)行特征值化

1、今天很殘酷哮奇,明天更殘酷膛腐,后天很美好,
但絕對大部分是死在明天晚上鼎俘,所以每個人不要放棄今天哲身。

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

3棍丐、如果只用一種方式了解某樣事物,你就不會真正了解它歌逢。
了解事物真正含義的秘密取決于如何將其與我們所了解的事物相聯(lián)系
from sklearn.feature_extraction.text import CountVectorizer
import jieba


def cutword():
    con1 = jieba.cut("今天很殘酷巾钉,明天更殘酷,后天很美好秘案,但絕對大部分是死在明天晚上砰苍,所以每個人不要放棄今天。")
    con2 = jieba.cut("我們看到的從很遠(yuǎn)星系來的光是在幾百萬年之前發(fā)出的阱高,這樣當(dāng)我們看到宇宙時赚导,我們是在看它的過去。")
    con3 = jieba.cut("如果只用一種方式了解某樣事物赤惊,你就不會真正了解它吼旧。了解事物真正含義的秘密取決于如何將其與我們所了解的事物相聯(lián)系。")

    # 轉(zhuǎn)換成列表
    content1 = list(con1)
    content2 = list(con2)
    content3 = list(con3)

    # 把列表轉(zhuǎn)換為字符串
    c1 = ' '.join(content1)
    c2 = ' '.join(content2)
    c3 = ' '.join(content3)

    return c1, c2, c3


def hanzivec():
    """
    中文特征值化
    :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


if __name__ == "__main__":
    hanzivec()

運(yùn)行結(jié)果

今天 很 殘酷 未舟, 明天 更 殘酷 圈暗, 后天 很 美好 掂为, 但 絕對 大部分 是 死 在 明天 晚上 , 所以 每個 人 不要 放棄 今天 员串。 我們 看到 的 從 很 遠(yuǎn) 星系 來 的 光是在 幾百萬年 之前 發(fā)出 的 勇哗, 這樣 當(dāng) 我們 看到 宇宙 時 , 我們 是 在 看 它 的 過去 寸齐。 如果 只用 一種 方式 了解 某樣 事物 欲诺, 你 就 不會 真正 了解 它 。 了解 事物 真正 含義 的 秘密 取決于 如何 將 其 與 我們 所 了解 的 事物 相 聯(lián)系 访忿。
['一種', '不會', '不要', '之前', '了解', '事物', '今天', '光是在', '幾百萬年', '發(fā)出', '取決于', '只用', '后天', '含義', '大部分', '如何', '如果', '宇宙', '我們', '所以', '放棄', '方式', '明天', '星系', '晚上', '某樣', '殘酷', '每個', '看到', '真正', '秘密', '絕對', '美好', '聯(lián)系', '過去', '這樣']
[[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]]

詞語占比

img

文章類型瞧栗??海铆?

這些詞語可以區(qū)分出文章的類別迹恐,但是 “所以” “我們” “明天” 這些詞呢?基本上每篇文章都會出現(xiàn)這些詞吧卧斟,所以我們需要一種方式解決這個問題殴边。這種文本特征抽取的方式叫做 TF-IDF

TF-IDF

TF: term frequency 詞的頻率
IDF:逆文檔頻率inverse document frequency
TF = 某個詞在文章中出現(xiàn)的次數(shù)

IDF = log(\frac{總文檔數(shù)量}{該詞出現(xiàn)的文檔數(shù)量})

TF-IDF = TF(詞頻)\times IDF(逆文檔頻率)

TF-IDF的主要思想是:如果某個詞或短語在一篇文章中出現(xiàn)的概率高宗挥,并且在其他文章中很少出現(xiàn)折欠,則認(rèn)為此詞或者短語具有很好的類別區(qū)分能力蛹疯,適合用來分類惭墓。

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

類:sklearn.feature_extraction.text.TfidfVectorizer

TfidfVectorizer語法

TfidfVectorizer(stop_words=None,…)

  • 返回詞的權(quán)重矩陣

TfidfVectorizer.fit_transform(X, y)

  • X:文本或者包含文本字符串的可迭代對象
  • 返回值:返回sparse矩陣

TfidfVectorizer.inverse_transform(X)

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

TfidfVectorizer.get_feature_names()

  • 返回值:單詞列表
from sklearn.feature_extraction import DictVectorizer
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer


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


if __name__ == "__main__":
    tfidfvec()

運(yùn)行結(jié)果

Building prefix dict from the default dictionary ...
Loading model from cache /var/folders/0x/2nv8y02908b38mngk5wxzvhc0000gn/T/jieba.cache
Loading model cost 0.715 seconds.
Prefix dict has been built successfully.
今天 很 殘酷 谓松, 明天 更 殘酷 感挥, 后天 很 美好 纬霞, 但 絕對 大部分 是 死 在 明天 晚上 募逞, 所以 每個 人 不要 放棄 今天 蛋铆。 我們 看到 的 從 很 遠(yuǎn) 星系 來 的 光是在 幾百萬年 之前 發(fā)出 的 , 這樣 當(dāng) 我們 看到 宇宙 時 放接, 我們 是 在 看 它 的 過去 刺啦。 如果 只用 一種 方式 了解 某樣 事物 , 你 就 不會 真正 了解 它 纠脾。 了解 事物 真正 含義 的 秘密 取決于 如何 將 其 與 我們 所 了解 的 事物 相 聯(lián)系 玛瘸。
['一種', '不會', '不要', '之前', '了解', '事物', '今天', '光是在', '幾百萬年', '發(fā)出', '取決于', '只用', '后天', '含義', '大部分', '如何', '如果', '宇宙', '我們', '所以', '放棄', '方式', '明天', '星系', '晚上', '某樣', '殘酷', '每個', '看到', '真正', '秘密', '絕對', '美好', '聯(lián)系', '過去', '這樣']
[[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.        ]]

為什么需要TfidfVectorizer

分類機(jī)器學(xué)習(xí)算法的的重要依據(jù)

其實吧TF-IDF也是一個過時的方法,在自然語言分析里會有一些新的技術(shù)苟蹈,但是這個基本的也得知道昂ā!


最近在做一些毛用都沒有的Vue項目慧脱,純浪費(fèi)生命渺绒,影響我在機(jī)器學(xué)習(xí)的世界里當(dāng)一個快樂的調(diào)包俠,her tui??~ 啥也不是!

后來包里總帶把傘芒篷,因為下雨了沒有誰來送傘,也沒有誰陪著淋雨采缚。
不帶傘的話针炉,站也不是走也不是,像個可憐的笑話……
2020年8月20日 Macsen Chu

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末扳抽,一起剝皮案震驚了整個濱河市篡帕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌贸呢,老刑警劉巖镰烧,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異楞陷,居然都是意外死亡怔鳖,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門固蛾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來结执,“玉大人,你說我怎么就攤上這事艾凯∠揍#” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵趾诗,是天一觀的道長蜡感。 經(jīng)常有香客問我,道長恃泪,這世上最難降的妖魔是什么郑兴? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮悟泵,結(jié)果婚禮上杈笔,老公的妹妹穿的比我還像新娘。我一直安慰自己糕非,他們只是感情好蒙具,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著朽肥,像睡著了一般禁筏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上衡招,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天篱昔,我揣著相機(jī)與錄音,去河邊找鬼。 笑死州刽,一個胖子當(dāng)著我的面吹牛空执,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播穗椅,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼辨绊,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了匹表?” 一聲冷哼從身側(cè)響起门坷,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎袍镀,沒想到半個月后默蚌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡苇羡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年绸吸,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宣虾。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡惯裕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出绣硝,到底是詐尸還是另有隱情蜻势,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布鹉胖,位于F島的核電站握玛,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏甫菠。R本人自食惡果不足惜挠铲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望寂诱。 院中可真熱鬧拂苹,春花似錦、人聲如沸痰洒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽丘喻。三九已至脯宿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間泉粉,已是汗流浹背连霉。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工榴芳, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人跺撼。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓窟感,卻偏偏與公主長得像,于是被迫代替她去往敵國和親歉井。 傳聞我的和親對象是個殘疾皇子肌括,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353