1. 程式人生 > >機器學習演算法 樸素貝葉斯

機器學習演算法 樸素貝葉斯

一切盡在程式碼中

python自己下載資料集 是真的慢…

from sklearn.datasets import fetch_20newsgroups
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB

# 樸素貝葉斯沒有超引數 不需要調參
def naviebayes():
    # 樸素貝葉斯進行文字分類
    print("*" * 100)
    # 分類資料集
    # subset 可以指定all train test 表示下載不同的資料集
    # 預設下載到家目錄下 sklearn_down....
    news = fetch_20newsgroups(subset='all')
    # 進行資料分割
    x_train, x_test, y_train, y_test = train_test_split(news.data, news.target, test_size=0.25)
    # 對資料集進行特徵抽取  預設使用tfidf
    tf = TfidfVectorizer()
    # 以訓練集中詞的列表進行每篇文章重要性統計
    x_train = tf.fit_transform(x_train)
    print(tf.get_feature_names())
    x_test = tf.transform(x_test)
    # 進行樸素貝葉斯演算法的預測
    # 其中alpha是樸素貝葉斯中的拉普拉斯常量  避免因為個別資料 使得概率為0
    mlt = MultinomialNB(alpha=1.0)
    # print(x_train.toarray())
    # 由於訓練集轉化之後會出現onehot的編碼
    # 即會出現大量的 0 所以不建議轉化.toarray()反正 在我電腦上 轉了就跑不出來
    # 賊尼瑪真實
    print(x_train)
    mlt.fit(x_train, y_train)
    y_predict = mlt.predict(x_test)
    #     得出準確率
    print("準確率為:" , mlt.score(x_test, y_test))


if __name__ == '__main__':
    naviebayes()