基於樸素貝葉斯的書籍評價分類

2021-09-27 07:35:01 字數 4417 閱讀 9227

data = pd.read_csv('./data.csv',encoding='ansi')
好評的轉化0,差評的轉化為1 

data.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)

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,1,1,評價都是差評,**準確率為100%

樸素貝葉斯分類

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的樣本 數總樣本...