先來拜見一下祖師爺(祖師爺真帥)
“人工智能之父” 艾倫.圖靈 圖靈測試(1950)
馬文·李·閔斯基(英語:Marvin Lee Minsky萌衬,1927年8月9日-2016年1月24日),科學(xué)家它抱,專長于認(rèn)知科學(xué)與人工智能領(lǐng)域秕豫,麻省理工學(xué)院人工智能實驗室的創(chuàng)始人之一,著有幾部人工智能和哲學(xué)方面的作品观蓄。1969年馁蒂,因為在人工智能領(lǐng)域的貢獻(xiàn),獲得圖靈獎蜘腌。
圖片藝術(shù)化 GAN神經(jīng)網(wǎng)絡(luò)
這就說明了Python天下第一
開個玩笑,語言只是工具饵隙,我寫Java的時候也說Java天下第一撮珠,
PHP才是世界上最好的語言
就這些書啊,我都沒有看過金矛,不過我還年輕芯急,以后我也不會看的。
什么是機(jī)器學(xué)習(xí)
機(jī)器學(xué)習(xí)是從數(shù)據(jù)中自動分析獲得規(guī)律(模型)驶俊,并利用規(guī)律對未知數(shù)據(jù)進(jìn)行預(yù)測
為什么需要機(jī)器學(xué)習(xí)
機(jī)器學(xué)習(xí)應(yīng)用場景
數(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ù)集
- 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)值
注:有些數(shù)據(jù)集可以沒有目標(biāo)值
如何利用工具自己進(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)換
流程
- 實例化類DictVectorizer
- 調(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編碼
文本特征抽取
作用:對文本數(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()
- 返回值:單詞列表
流程
- 實例化類CountVectorizer
- 調(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]]
詞語占比
文章類型瞧栗??海铆?
這些詞語可以區(qū)分出文章的類別迹恐,但是 “所以” “我們” “明天” 這些詞呢?基本上每篇文章都會出現(xiàn)這些詞吧卧斟,所以我們需要一種方式解決這個問題殴边。這種文本特征抽取的方式叫做 TF-IDF
TF-IDF
TF: term frequency 詞的頻率
IDF:逆文檔頻率inverse document frequency
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