中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
端到端機(jī)器學(xué)習(xí)項(xiàng)目:評(píng)論分類

作者|Kiprono Elijah Koech
編譯|VK
來(lái)源|Towards Data Science

在本文中,我們將討論一個(gè)分類問(wèn)題,該問(wèn)題涉及到將評(píng)論分為正面或負(fù)面。這里使用的評(píng)論是客戶在ABC服務(wù)上所做的評(píng)論。

數(shù)據(jù)收集和預(yù)處理

在這個(gè)項(xiàng)目中使用的數(shù)據(jù)是從網(wǎng)上爬來(lái)的,數(shù)據(jù)清理在這個(gè)Notebook上完成:https://github.com/kipronokoech/Reviews-Classification/blob/master/data_collection.ipynb

在我們抓取數(shù)據(jù)后被保存到一個(gè).txt文件中,下面是一行文件的例子(代表一個(gè)數(shù)據(jù)點(diǎn))

{'socialShareUrl': 'https://www.abc.com/reviews/5ed0251025e5d20a88a2057d', 'businessUnitId': '5090eace00006400051ded85', 'businessUnitDisplayName': 'ABC', 'consumerId': '5ed0250fdfdf8632f9ee7ab6', 'consumerName': 'May', 'reviewId': '5ed0251025e5d20a88a2057d', 'reviewHeader': 'Wow - Great Service', 'reviewBody': 'Wow. Great Service with no issues.  Money was available same day in no time.', 'stars': 5}

數(shù)據(jù)點(diǎn)是一個(gè)字典,我們對(duì)reviewBody和stars感興趣。

我們將把評(píng)論分類如下

1 and 2 - Negative
3 - Neutral
4 and 5 - Positive

在收集數(shù)據(jù)時(shí),網(wǎng)站上有36456條評(píng)論。數(shù)據(jù)高度不平衡:94%的評(píng)論是正面的,4%是負(fù)面的,2%是中性的。在這個(gè)項(xiàng)目中,我們將在不平衡的數(shù)據(jù)和平衡的數(shù)據(jù)上擬合不同的Sklearn模型(我們?nèi)サ粢恍┱嬖u(píng)論,這樣我們就有相同數(shù)量的正面和負(fù)面評(píng)論。)

下圖顯示了數(shù)據(jù)的組成:

在上圖中,我們可以看到數(shù)據(jù)是高度不平衡的。

讓我們從導(dǎo)入必要的包開(kāi)始,并定義將用于對(duì)給定的評(píng)論進(jìn)行分類的類Review

#導(dǎo)入包
import numpy as np
import random
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
from sklearn.metrics import f1_score #f1分?jǐn)?shù),一種評(píng)價(jià)指標(biāo)
import ast #將字符串轉(zhuǎn)換為字典
from IPython.display import clear_output
from sklearn import svm #支持向量機(jī)分類器
from sklearn.metrics import confusion_matrix
from sklearn.linear_model import LogisticRegression #導(dǎo)入 logistic regression
from sklearn.tree import DecisionTreeClassifier #導(dǎo)入 Decision tree
from sklearn.naive_bayes import GaussianNB
from sklearn.ensemble import RandomForestClassifier
import pandas as pd
import seaborn as sb


# 將評(píng)論分為正面、負(fù)面或中性
class Review:
    def __init__(self, text, score):
        self.text = text
        self.score = score
        self.sentiment = self.get_sentiment()
        
    def get_sentiment(self):
        if self.score <= 2:
            return "NEGATIVE"
        elif self.score == 3: 
            return "NEUTRAL"
        else: #4或5分
            return "POSITIVE"

在這里,我們將加載數(shù)據(jù)并使用Review類將評(píng)論分類為正面、反面或中性

# 大部分清理是在數(shù)據(jù)web爬取期間完成的
# Notebook 鏈接
# https://github.com/kipronokoech/Reviews-Classification/blob/master/data_collection.ipynb
reviews = []
with open("./data/reviews.txt") as fp:
    for index,line in enumerate(fp):
        # 轉(zhuǎn)換為字典
        review = ast.literal_eval(line)
        #對(duì)評(píng)論進(jìn)行分類并將其附加到reviews中
        reviews.append(Review(review['reviewBody'], review['stars']))
       
# 打印出reviews[0]的情緒類別和文本
print(reviews[0].text)
print(reviews[0].sentiment)
Wow. Great Service with no issues.  Money was available same day in no time.

POSITIVE

將數(shù)據(jù)拆分為訓(xùn)練集和測(cè)試集

# 70%用于訓(xùn)練,30%用于測(cè)試
training, test = train_test_split(reviews, test_size=0.30, random_state=42)

# 定義X和Y
train_x,train_y = [x.text for x in training],[x.sentiment for x in training]
test_x,test_y = [x.text for x in test],[x.sentiment for x in test]

print("Size of train set: ",len(training))
print("Size of train set: ",len(test))
Size of train set:  25519
Size of train set:  10937

在我們繼續(xù)下一步之前,我們需要理解詞袋的概念。

詞袋

正如我們所知,一臺(tái)計(jì)算機(jī)只理解數(shù)字,因此我們需要使用詞袋模型將我們收到的評(píng)論信息轉(zhuǎn)換成一個(gè)數(shù)字列表。

詞袋是一種文本表示形式。它包括兩個(gè)方面:已知單詞的詞匯與已知單詞存在程度的度量。

詞袋模型是一種用于文檔分類的支持模型,其中每個(gè)詞的出現(xiàn)頻率作為訓(xùn)練分類器的特征。

例子:

考慮這兩個(gè)評(píng)論

  • Excellent Services by the ABC remit team.Recommend.
  • Bad Services. Transaction delayed for three days.Don’t recommend.

從以上兩句話中,我們可以得出以下詞典

[Excellent, Services, by, the, ABC, remit, team, recommend, bad, transaction, delayed, for, three, days, don’t]

我們現(xiàn)在將這個(gè)字典標(biāo)記化以生成以下兩個(gè)數(shù)據(jù)點(diǎn),這些數(shù)據(jù)點(diǎn)現(xiàn)在可以用來(lái)訓(xùn)練分類器

在python中,標(biāo)記化的實(shí)現(xiàn)如下

# 導(dǎo)入用于向量化的庫(kù)
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer

# sklearn上的向量化——簡(jiǎn)單的例子
corpus = [
    "Excellent Services by the ABC remit team.Recommend.",
    "Bad Services. Transaction delayed for three days.Don't recommend."]
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(corpus)
#print(X) #這是一個(gè)矩陣
print(vectorizer.get_feature_names()) # 字典
print(X.toarray())#顯然是一個(gè)矩陣,每一行都是每個(gè)句子的標(biāo)記值
['abc', 'bad', 'by', 'days', 'delayed', 'don', 'excellent', 'for', 'recommend', 'remit', 'services', 'team', 'the', 'three', 'transaction']
[[1 0 1 0 0 0 1 0 1 1 1 1 1 0 0]
 [0 1 0 1 1 1 0 1 1 0 1 0 0 1 1]]

現(xiàn)在我們已經(jīng)理解了詞袋的概念,現(xiàn)在讓我們將這些知識(shí)應(yīng)用到我們的訓(xùn)練和測(cè)試中

vectorizer = TfidfVectorizer()
train_x_vectors = vectorizer.fit_transform(train_x)
test_x_vectors = vectorizer.transform(test_x)

在不平衡數(shù)據(jù)中訓(xùn)練模型

現(xiàn)在,我們擁有了向量,我們可以用來(lái)擬合模型,我們可以這樣做

支持向量機(jī)

#訓(xùn)練支持向量機(jī)分類器
clf_svm = svm.SVC(kernel='linear')

clf_svm.fit(train_x_vectors, train_y)
#基于SVM的隨機(jī)預(yù)測(cè)

i = np.random.randint(0,len(test_x))
print("Review Message: ",test_x[i])
print("Actual: ",test_y[i])
print("Prediction: ",clf_svm.predict(test_x_vectors[i]))

#支持向量機(jī)的混淆矩陣——你可以有其他分類器的混淆矩陣
labels = ["NEGATIVE","NEUTRAL","POSITIVE"]
pred_svm = clf_svm.predict(test_x_vectors)
cm =confusion_matrix(test_y,pred_svm)

df_cm = pd.DataFrame(cm, index=labels, columns=labels)

sb.heatmap(df_cm, annot=True, fmt='d')
plt.title("Confusion matrix from SVM [Imbalanced]")
plt.savefig("./plots/confusion.png")
Review Message:  easy efficient  first class
Actual:  POSITIVE
Prediction:  ['POSITIVE']

訓(xùn)練的其他模型包括隨機(jī)森林、樸素貝葉斯、決策樹(shù)和Logistic回歸。

完整代碼的鏈接:https://github.com/kipronokoech/Reviews-Classification

基于不平衡數(shù)據(jù)的模型性能評(píng)估

  1. 準(zhǔn)確度

利用準(zhǔn)確度對(duì)模型進(jìn)行了評(píng)估,結(jié)果如下

我們得到了90%的準(zhǔn)確率,是正確還是有問(wèn)題?答案是,出了點(diǎn)問(wèn)題。

數(shù)據(jù)是不平衡的,使用準(zhǔn)確度作為評(píng)估指標(biāo)不是一個(gè)好主意。以下是各類別的分布情況

----------TRAIN SET ---------------
Positive reviews on train set: 23961 (93.89%)
Negative reviews on train set: 1055 (4.13%)
Neutral reviews on train set: 503 (1.97%)

----------TEST SET ---------------
Positive reviews on test set: 10225 (93.48%)
Negative reviews on test set: 499 (4.56%)
Neutral reviews on test set: 213 (1.95%)

如果分類器正確地預(yù)測(cè)了測(cè)試集中所有的正面評(píng)價(jià),而沒(méi)有預(yù)測(cè)到負(fù)面和中性評(píng)論,會(huì)發(fā)生什么?該分類器的準(zhǔn)確率可達(dá)93.48%!?。。。?!

這意味著我們的模型將是93.48%的準(zhǔn)確率,我們會(huì)認(rèn)為模型是好的,但實(shí)際上,模型“只知道”如何預(yù)測(cè)一類(正面評(píng)價(jià))。事實(shí)上,根據(jù)我們的結(jié)果,我們的支持向量機(jī)預(yù)測(cè)根本沒(méi)有中性評(píng)論

為了進(jìn)一步理解這個(gè)問(wèn)題,讓我們引入另一個(gè)指標(biāo):F1分?jǐn)?shù),并用它來(lái)評(píng)估我們的模型。

  1. F1分?jǐn)?shù)

F1分?jǐn)?shù)是精確和召回率的調(diào)和平均值。

精確性和召回率衡量模型正確區(qū)分正面案例和負(fù)面案例的程度。

當(dāng)我們根據(jù)這個(gè)指標(biāo)評(píng)估我們的模型時(shí),結(jié)果如下

從圖中,我們現(xiàn)在知道這些模型在對(duì)正面評(píng)論進(jìn)行分類時(shí)非常好,而在預(yù)測(cè)負(fù)面評(píng)論和中性評(píng)論方面則很差。

使用平衡數(shù)據(jù)

作為平衡數(shù)據(jù)的一種方法,我們決定隨機(jī)刪除一些正面評(píng)論,以便我們?cè)谟?xùn)練模型時(shí)使用均勻分布的評(píng)論。這一次,我們正在訓(xùn)練1055個(gè)正面評(píng)論和1055個(gè)負(fù)面評(píng)論的模型。我們放棄中性評(píng)論。

(你也可以考慮使用過(guò)采樣技術(shù)來(lái)解決數(shù)據(jù)不平衡的問(wèn)題)

在訓(xùn)練了模型之后,我們得到了以下結(jié)果

支持向量機(jī)的最佳結(jié)果是88.9%的準(zhǔn)確率,在檢查F1分?jǐn)?shù)(如下)后,我們現(xiàn)在可以意識(shí)到模型預(yù)測(cè)負(fù)面評(píng)價(jià)和正面評(píng)價(jià)一樣好。

如果我們看一下顯示支持向量機(jī)結(jié)果的混淆矩陣,我們會(huì)注意到該模型在預(yù)測(cè)兩個(gè)類方面都很好

在這里找到完整的代碼:https://github.com/kipronokoech/Reviews-Classification

結(jié)論

在完成這個(gè)項(xiàng)目后,我希望你能夠了解到:

  1. 在不平衡的數(shù)據(jù)上擬合一個(gè)或多個(gè)模型可能(在大多數(shù)情況下確實(shí)如此)會(huì)導(dǎo)致不良結(jié)果。

  2. 在處理不平衡數(shù)據(jù)時(shí),準(zhǔn)確度不是一個(gè)好的衡量標(biāo)準(zhǔn)。

  3. 大部分工作是在預(yù)處理階段完成的。

感謝閱讀

原文鏈接:https://towardsdatascience.com/end-to-end-machine-learning-project-reviews-classification-60666d90ec19

歡迎關(guān)注磐創(chuàng)AI博客站:
http://panchuang.net/

sklearn機(jī)器學(xué)習(xí)中文官方文檔:
http://sklearn123.com/

歡迎關(guān)注磐創(chuàng)博客資源匯總站:
http://docs.panchuang.net/

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
使用Python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的垃圾郵件分類器
Query意圖分析:記一次完整的機(jī)器學(xué)習(xí)過(guò)程(scikit learn library學(xué)習(xí)筆記) | 我愛(ài)機(jī)器學(xué)習(xí)
DL之RBM:(sklearn自帶數(shù)據(jù)集為1797個(gè)樣本*64個(gè)特征+5倍數(shù)據(jù)集)深度學(xué)習(xí)之BRBM模型學(xué)習(xí)+LR進(jìn)行分類實(shí)現(xiàn)手寫數(shù)字圖識(shí)別
sklearn庫(kù)的學(xué)習(xí)
為什么要用交叉驗(yàn)證
機(jī)器學(xué)習(xí)入門實(shí)踐——鳶尾花分類
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服