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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

机器学习实战-贝叶斯算法-24

發布時間:2024/9/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习实战-贝叶斯算法-24 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

貝葉斯-新聞分類

from sklearn.datasets import fetch_20newsgroups from sklearn.model_selection import train_test_split news = fetch_20newsgroups(subset='all') print(news.target_names) print(len(news.data)) print(len(news.target))

print(len(news.target_names))

news.data[0]

print(news.target[0]) print(news.target_names[news.target[0]])

x_train,x_test,y_train,y_test = train_test_split(news.data,news.target) # train = fetch_20newsgroups(subset='train') # x_train = train.data # y_train = train.target # test = fetch_20newsgroups(subset='test') # x_test = test.data # y_test = test.target

from sklearn.feature_extraction.text import CountVectorizertexts=["dog cat fish","dog cat cat","fish bird", 'bird'] cv = CountVectorizer() cv_fit=cv.fit_transform(texts)# print(cv.get_feature_names()) print(cv_fit.toarray())print(cv_fit.toarray().sum(axis=0))

from sklearn import model_selection from sklearn.naive_bayes import MultinomialNBcv = CountVectorizer() cv_data = cv.fit_transform(x_train) mul_nb = MultinomialNB()scores = model_selection.cross_val_score(mul_nb, cv_data, y_train, cv=3, scoring='accuracy') print("Accuracy: %0.3f" % (scores.mean()))


TfidfVectorizer使用了一個高級的計算方法,稱為Term Frequency Inverse Document
Frequency (TF-IDF)。這是一個衡量一個詞在文本或語料中重要性的統計方法。直覺上講,該方法通過比較在整個語料庫的詞的頻率,尋求在當前文檔中頻率較高的詞。這是一種將結果進行標準化的方法,可以避免因為有些詞出現太過頻繁而對一個實例的特征化作用不大的情況(我猜測比如a和and在英語中出現的頻率比較高,但是它們對于表征一個文本的作用沒有什么作用)

from sklearn.feature_extraction.text import TfidfVectorizer # 文本文檔列表 text = ["The quick brown fox jumped over the lazy dog.", "The dog.", "The fox"] # 創建變換函數 vectorizer = TfidfVectorizer() # 詞條化以及創建詞匯表 vectorizer.fit(text) # 總結 print(vectorizer.vocabulary_) print(vectorizer.idf_) # 編碼文檔 vector = vectorizer.transform([text[0]]) # 總結編碼文檔 print(vector.shape) print(vector.toarray())

# 創建變換函數 vectorizer = TfidfVectorizer() # 詞條化以及創建詞匯表 tfidf_train = vectorizer.fit_transform(x_train)scores = model_selection.cross_val_score(mul_nb, tfidf_train, y_train, cv=3, scoring='accuracy') print("Accuracy: %0.3f" % (scores.mean()))

def get_stop_words():result = set()for line in open('stopwords_en.txt', 'r').readlines():result.add(line.strip())return result# 加載停用詞 stop_words = get_stop_words() # 創建變換函數 vectorizer = TfidfVectorizer(stop_words=stop_words)mul_nb = MultinomialNB(alpha=0.01)# 詞條化以及創建詞匯表 tfidf_train = vectorizer.fit_transform(x_train)scores = model_selection.cross_val_score(mul_nb, tfidf_train, y_train, cv=3, scoring='accuracy') print("Accuracy: %0.3f" % (scores.mean()))

# 切分數據集 tfidf_data = vectorizer.fit_transform(news.data) x_train,x_test,y_train,y_test = train_test_split(tfidf_data,news.target)mul_nb.fit(x_train,y_train) print(mul_nb.score(x_train, y_train))print(mul_nb.score(x_test, y_test))

貝葉斯拼寫檢查器


拼寫檢查器原理
在所有正確的拼寫詞中, 我們想要找一個正確的詞 c, 使得對于 w 的條件概率最大。求解:
P(c|w) -> P(w|c) P? / P(w)
比如:appla是條件w,apple和apply是正確的詞c,對于apple和apply來說P(w)都是一樣的,所以我們在上式中忽略它, 寫成:
P(w|c) P?

P?, 文章中出現這個正確拼寫的詞 c 的概率, 也就是說, 在英語文章中, c 出現的概率有多大。
假設可以認為單詞在文章中出現的概率越大,則正確拼寫的概率就越大,可以用單詞出現次數來代替這個量。好比說, 英語中出現 the 的概率 P(‘the’) 就相對高, 而出現 P(‘zxzxzxzyy’) 的概率接近0(假設后者也是一個詞的話).
P(w|c), 在用戶想鍵入 c 的情況下敲成 w 的概率。這個是代表用戶會以多大的概率把 c 敲錯成 w。

import re # 讀取內容 text = open('big.txt').read() # 轉小寫,只保留a-z字符 text = re.findall('[a-z]+', text.lower()) dic_words = {} for t in text:dic_words[t] = dic_words.get(t,0) + 1 dic_words


編輯距離:
兩個詞之間的編輯距離定義為使用了幾次插入(在詞中插入一個單字母), 刪除(刪除一個單字母), 交換(交換相鄰兩個字母), 替換(把一個字母換成另一個)的操作從一個詞變到另一個詞.

# 字母表 alphabet = 'abcdefghijklmnopqrstuvwxyz'#返回所有與單詞 word 編輯距離為 1 的集合 def edits1(word):n = len(word)return set([word[0:i]+word[i+1:] for i in range(n)] + # deletion[word[0:i]+word[i+1]+word[i]+word[i+2:] for i in range(n-1)] + # transposition[word[0:i]+c+word[i+1:] for i in range(n) for c in alphabet] + # alteration[word[0:i]+c+word[i:] for i in range(n+1) for c in alphabet]) # insertion apple = 'apple' apple[0:0] + apple[1:]


#返回所有與單詞 word 編輯距離為 2 的集合 #在這些編輯距離小于2的詞中間, 只把那些正確的詞作為候選詞 def edits2(word):return set(e2 for e1 in edits1(word) for e2 in edits1(e1)) e1 = edits1('something') e2 = edits2('something') len(e1) + len(e2)


與 something 編輯距離為1或者2的單詞居然達到了 114,818 個
優化:只把那些正確的詞作為候選詞,優化之后edits2只能返回 3 個單詞: ‘smoothing’, ‘something’ 和 ‘soothing’

P(w|c)求解:正常來說把一個元音拼成另一個的概率要大于輔音 (因為人常常把 hello 打成 hallo 這樣); 把單詞的第一個字母拼錯的概率會相對小, 等等。但是為了簡單起見, 選擇了一個簡單的方法: 編輯距離為1的正確單詞比編輯距離為2的優先級高, 而編輯距離為0的正確單詞優先級比編輯距離為1的高.一般把hello打成hallo的可能性比把hello打成halo的可能性大。

def known(words):w = set()for word in words:if word in dic_words:w.add(word)return w# 先計算編輯距離,再根據編輯距離找到最匹配的單詞 def correct(word):# 獲取候選單詞#如果known(set)非空, candidates 就會選取這個集合, 而不繼續計算后面的candidates = known([word]) or known(edits1(word)) or known(edits2(word)) or word# 字典中不存在相近的詞if word == candidates:return word# 返回頻率最高的詞max_num = 0for c in candcidates:if dic_words[c] >= max_num:max_num = dic_words[c]candidate = creturn candidate

總結

以上是生活随笔為你收集整理的机器学习实战-贝叶斯算法-24的全部內容,希望文章能夠幫你解決所遇到的問題。

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