data = pd.read_csv('./data.csv',encoding='ansi')
好評的轉化0,差評的轉化為1data.loc[data.loc[:,'評價'] == '好評','評價'] = 0
data.loc[data.loc[:,'評價'] == '差評','評價'] = 1
data.loc[:,'評價'] = data.loc[:,'評價'].astype('int')
使用結巴分詞對評價短語進行分詞content_list =
for tmp in data.loc[:,'內容 ']:
res = jieba.cut(tmp,cut_all=true)
#組裝分詞
res_str = ','.join(res)
使用停用詞來將與短語語意無關的詞語剔除#獲取停用詞stop_words =
with open('./stopwords.txt',encoding='utf-8') as f:
lines = f.readlines()
for line in lines:
line_obj = line.strip()
使用詞頻向量化技術,將短語**現的詞彙轉化成詞語出現的次數,和出現的詞彙con_vec = countvectorizer(stop_words=stop_words)x = con_vec.fit_transform(content_list)
feature = x.toarray()
#獲取分詞結果
names = con_vec.get_feature_names()
# print(x)
print(feature) #出現的次數陣列
print(names)
feature是np.ndarray型別,data.loc[:,'評價']是series型別,兩者不能直接拼接,需要將型別轉化,轉化完型別之後,還需要將data.loc[:,'評價'].values與feature轉化到同一緯度上,這個時候會使用到reshape將資料轉化為n行1列的二維資料。#reshape((-1,1)將資料轉化成n行1列的格式
new_data = np.concatenate((feature,data.loc[:,'評價'].values.reshape((-1,1))),axis=1)
#陣列除了最後一列,都為特徵值,最後一列為目標值
#拆分訓練集與測試集,選取n行為測試集,n行為訓練集
train_data = new_data[:10,:]
test_data = new_data[10:,:]
x_train = train_data[:,:-1]
y_train = train_data[:,-1]
x_test = test_data[:,:-1]
y_test = test_data[:,-1]
#alpha=1.0 拉普拉斯平滑係數
nb = multinomialnb(alpha=1.0)
nb.fit(x_train,y_train)
#**資料
y_predict = nb.predict(x_test)
#準確率
score = nb.score(x_test,y_test)
print('y_predict:\n',y_predict)
print('準確率:\n',score)
這裡**值為1,1,1,評價都是差評,**準確率為100%import numpy as np
import pandas as pd
import jieba
from sklearn.feature_extraction.text import countvectorizer
from sklearn.*****_bayes import multinomialnb
#載入資料
data = pd.read_csv('./data.csv',encoding='ansi')
# print(data)
#將目標值與特徵值轉化為數值型別
data.loc[data.loc[:,'評價'] == '好評','評價'] = 0
data.loc[data.loc[:,'評價'] == '差評','評價'] = 1
# print(data)
data.loc[:,'評價'] = data.loc[:,'評價'].astype('int')
# print(data.loc[:,'評價'].dtype)
#轉化特徵值為數值型
content_list =
for tmp in data.loc[:,'內容 ']:
res = jieba.cut(tmp,cut_all=true)
#組裝分詞
res_str = ','.join(res)
# print(content_list)
#處理停用詞
stop_words =
with open('./stopwords.txt',encoding='utf-8') as f:
lines = f.readlines()
for line in lines:
line_obj = line.strip()
#列印停用詞
# print(stop_words)
#去除停用詞
# print(len(stop_words))
# stop_words = list(set(stop_words))
# print(len(stop_words))
con_vec = countvectorizer(stop_words=stop_words)
x = con_vec.fit_transform(content_list)
feature = x.toarray()
#獲取分詞結果
names = con_vec.get_feature_names()
# print(x)
print(feature) #出現的次數陣列
print(names)
#將特徵值與目標值組成完整資料
'''feature是np.ndarray型別,data.loc[:,'評價']是series型別,兩者不能直接拼接,
需要將型別轉化,轉化完型別之後,還需要將data.loc[:,'評價'].values與feature
轉化到同一緯度上,這個時候會使用到reshape將資料轉化為n行1列的二維資料
'''#reshape((-1,1)將資料轉化成n行1列的格式
new_data = np.concatenate((feature,data.loc[:,'評價'].values.reshape((-1,1))),axis=1)
# print(new_data)
#陣列除了最後一列,都為特徵值,最後一列為目標值
#拆分訓練集與測試集,選取n行為測試集,n行為訓練集
train_data = new_data[:10,:]
test_data = new_data[10:,:]
#拆分訓練接與測試集的特徵值與目標值
x_train = train_data[:,:-1]
y_train = train_data[:,-1]
x_test = test_data[:,:-1]
y_test = test_data[:,-1]
#直接進行樸素貝葉斯分類
#alpha=1.0 拉普拉斯平滑係數
nb = multinomialnb(alpha=1.0)
nb.fit(x_train,y_train)
#**資料
y_predict = nb.predict(x_test)
#準確率
score = nb.score(x_test,y_test)
print('y_predict:\n',y_predict)
print('準確率:\n',score)
樸素貝葉斯分類
1 貝葉斯分類是一類分類演算法的總稱,這類演算法均以貝葉斯定理為基礎,故統稱為貝葉斯分類。2 樸素貝葉斯的思想基礎是這樣的 對於給出的待分類項,求解在此項出現的條件下各個類別出現的概率,哪個最大,就認為此待分類項屬於哪個類別。通俗來說,就好比這麼個道理,你在街上看到乙個黑人,我問你你猜這哥們 來的,...
樸素貝葉斯分類
摘自寫在公司內部的wiki 要解決的問題 表中增加欄位classification,有四個取值 0 初始值,未分類 1 positive 2 normal 99 negative review submit前,由樸素貝葉斯分類器決定該條review的flag屬於negative還是positive ...
分類 樸素貝葉斯
原始的貝葉斯公式為 p b a p a b p a p a b p b p a 1 在分類問題中,y為類別,x為樣本特徵,則已知待 的樣本特徵 x 它為類別yi 的概率為 p yi x p x yi p y i p x p yi jp xj y i p x 2 p yi 類別為y i的樣本 數總樣本...