您的位置:首頁>正文

資料採擷——Python資料處理實戰!史上最完整的教程!看了就會!

一個人自學很有可能因為動力不足而中途放棄, 可以嘗試加入一個或幾個適合自己的網路群體(QQ、 微信、 社區等),尋找志同道合的學習夥伴, 相互交流、相互促進.如果大家想要學習交流歡迎給我私信, 私信關鍵字: 01.02.

03.04 都會得到不一樣的資料!系統堅持到關鍵字會自動發送。

問題描述

我們的問題是有監督文本分類問題, 我們的目標是調查哪種有監督機器學習方法最適合解決它。

給定一個投訴, 我們希望將其分配到12個類別之一。 分類器假定每個新投訴都被分配到一個且僅一個類別。 這是多類文本分類問題。 我迫不及待地想看看我們能做些什麼!

▌資料探索

在深入研究機器學習模型之前, 我們首先應該看一些例子, 以及每個類中的投訴數量:

import pandas as pddf = pd.read_csv('Consumer_Complaints.csv')df.head()

▌不平衡類

我們看到每類產品的投訴數量不平衡。 消費者的抱怨更偏向於收賬(Debt collection)、信用報告(Credit reporting)和抵押(Mortgage)。

但是, 在我們學習不平衡資料的情況下, 主要的類別可能會引起更大的注意。 我們 希望有一個分類器能夠對多數類提供較高的預測精度, 同時保持少數類別的合理準確性。

▌文本表示

分類器和學習演算法不能直接處理文本文檔的原始形式, 因為大多數演算法需要固定大小的數值特徵向量而不是具有可變長度的原始文本文檔 。 因此, 在預處理步驟中, 文本被轉換為更可行的特徵表示。

sublinear_df設置為True, 表示可以使用對數形式的頻率。

min_df是單詞必須存在的最小文檔數量。

norm設為l2, 以確保我們所有的特徵向量使用的L2正則。

ngram_range被設置為(1,2), 這表示我們想要考慮unigrams和bigrams。

將stop_words設置為“english”以刪除所有常用代詞(“a”, “the”, ...)以減少噪音詞的數量。

(4569,12633)

現在, 輸入是4569個文檔, 每篇是由12633個特徵表示,代表不同的unigrams和bigrams的tf-idf分數。

我們可以使用sklearn.feature_selection.chi2來查找與每個類別最相關的項:

[‘Credit reporting’]

上面結果還行。

▌模型選擇

我們現在準備嘗試不同的機器學習模型,評估它們的準確性並找出一些潛在的問題。

我們以下四種模型作為benchmark:

Logistic回歸

(多項)樸素貝葉斯

線性支援向量機

隨機森林

cv_df.groupby('model_name').accuracy.mean()

model_name

LinearSVC: 0.822890

LogisticRegression: 0.792927

MultinomialNB: 0.688519

RandomForestClassifier: 0.443826

Name: accuracy, dtype: float64

LinearSVC和Logistic回歸比其他兩個分類器執行得更好,LinearSVC具有輕微的優勢,精度(median accuracy)約為82%。

▌模型評估

繼續使用我們的最佳模型(LinearSVC),我們將查看混淆矩陣(confusion matrix),並顯示預測標籤和實際標籤之間的差異。

絕大多數預測結果都在對角線(預測標籤=實際標籤),這也是我們所希望的。 但是,存在一些錯誤分類,我們看看是什麼造成的:

正如你所看到的,一些錯誤分類的文檔是涉及多個主題的投訴(例如涉及 信用卡和信用報告 的投訴)。 這種錯誤會導致一些問題。

然後,我們使用卡方檢驗來查找與每個類別最相關的詞:

它們符合我們的預期。

最後,我們列印出每個類別的分類報告:

from sklearn import metricsprint(metrics.classification_report(y_test, y_pred, target_names=df['Product'].unique()))

代碼連結:

每篇是由12633個特徵表示,代表不同的unigrams和bigrams的tf-idf分數。

我們可以使用sklearn.feature_selection.chi2來查找與每個類別最相關的項:

[‘Credit reporting’]

上面結果還行。

▌模型選擇

我們現在準備嘗試不同的機器學習模型,評估它們的準確性並找出一些潛在的問題。

我們以下四種模型作為benchmark:

Logistic回歸

(多項)樸素貝葉斯

線性支援向量機

隨機森林

cv_df.groupby('model_name').accuracy.mean()

model_name

LinearSVC: 0.822890

LogisticRegression: 0.792927

MultinomialNB: 0.688519

RandomForestClassifier: 0.443826

Name: accuracy, dtype: float64

LinearSVC和Logistic回歸比其他兩個分類器執行得更好,LinearSVC具有輕微的優勢,精度(median accuracy)約為82%。

▌模型評估

繼續使用我們的最佳模型(LinearSVC),我們將查看混淆矩陣(confusion matrix),並顯示預測標籤和實際標籤之間的差異。

絕大多數預測結果都在對角線(預測標籤=實際標籤),這也是我們所希望的。 但是,存在一些錯誤分類,我們看看是什麼造成的:

正如你所看到的,一些錯誤分類的文檔是涉及多個主題的投訴(例如涉及 信用卡和信用報告 的投訴)。 這種錯誤會導致一些問題。

然後,我們使用卡方檢驗來查找與每個類別最相關的詞:

它們符合我們的預期。

最後,我們列印出每個類別的分類報告:

from sklearn import metricsprint(metrics.classification_report(y_test, y_pred, target_names=df['Product'].unique()))

代碼連結:

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示