1. 程式人生 > >python資料分析:分類分析(classification analysis)

python資料分析:分類分析(classification analysis)

何為分類分析

在機器學習和統計中,分類是基於包含其類別成員資格已知的觀察(或例項)的訓練資料集來識別新觀察所屬的一組類別(子群體)中的哪一個的問題。例如,將給定的電子郵件分配給“垃圾郵件”或“非垃圾郵件”類,並根據觀察到的患者特徵(性別,血壓,某些症狀的存在或不存在等)為給定患者分配診斷。 。分類是模式識別的一個例子。

在機器學習的術語中,[1]分類被認為是監督學習的一個例項,即學習可以獲得正確識別的觀察的訓練集的情況。相應的無監督程式稱為聚類,並涉及基於固有相似性或距離的某種度量將資料分組。

通常,將各個觀察結果分析為一組可量化的屬性,不同地稱為解釋變數或特徵。這些屬性可以不同地分類(例如,“A”,“B”,“AB”或“O”,對於血型),序數(例如“大”,“中”或“小”),整數值(例如,電子郵件中特定單詞的出現次數)或實際值(例如血壓的測量值)。

實現分類的演算法,特別是在具體實現中,被稱為分類器。術語“分類器”有時也指由分類演算法實現的數學函式,其將輸入資料對映到類別。

跨領域的術語是多種多樣的。在統計中,通常使用邏輯迴歸或類似程式進行分類,觀察的屬性稱為解釋變數(或獨立變數,迴歸量等),要預測的類別稱為結果,被認為是是因變數的可能值。在機器學習中,觀察通常被稱為例項,解釋變數被稱為特徵(被分組為特徵向量),並且要預測的可能類別是類。其他領域可能使用不同的術語:例如,在社群生態學中,術語“分類”通常是指聚類分析,即一種無監督學習,而不是本文中描述的監督學習。

常用分類演算法:

常用的分類演算法包括樸素貝葉斯、邏輯迴歸、決策樹、隨機森林、支援向量機等。

分類分析使用場景:

用於分類:

分類的主要用途和場景是“預測”,基於已有的樣本預測新樣本的所屬類別。例如信用評級、風險等級、欺詐預測等;同時,它也是模式識別的重要組成部分,廣泛應用到機器翻譯,人臉識別、醫學診斷、手寫字元識別、指紋識別的影象識別、語音識別、視訊識別的領域;另外,分類演算法也可以用於知識抽取,通過模型找到潛在的規律,幫助業務得到可執行的規則。

提煉應用規則:

為資料化運用提供規則,也是分類分析的主要應用方向。

常見應用場景:

  • 對沉默會員做會員重新啟用,應該挑選具有何種特徵會員
  • 商品選取何種促銷活動清倉
  • 那些廣告更適合VIP商家的投放需求

提煉特徵規則利用的是在構建分類演算法時產生的分類規則。

提取變數特徵:

從大量的輸入變數的重要性特徵,然後提取權重較高的幾個特徵是分類分析的重點應用之一。是資料歸約和資料降維的重要方式。獲取原始資料集並對資料預處理,然後將資料集放到分類演算法中進行訓練,然後衝演算法模型中提取特徵權重資訊。

處理缺失值:
將缺失欄位作為目標變數進行預測,從而得到較為可能的補全值。

分類分析演算法的選取:

  • 文字分類時用到最多的是樸素貝葉斯
  • 訓練集比較小,那麼選擇高偏差且低方差的分類演算法效果逢高,如樸素貝葉斯、支援向量機、這些演算法不容易過擬合。
  • 訓練集比較大,選取何種方法都不會顯著影響準去度
  • 省時好操作選著用支援向量機,不要使用神經網路
  • 重視演算法準確度,那麼選擇演算法精度高的演算法,例如支援向量機、隨機森林。
  • 想得到有關預測結果的概率資訊,使用邏輯迴歸
  • 需要清洗的決策規則,使用決策樹

python程式碼實現決策樹演算法

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier, export_graphviz
# 匯入評估指標模組
from sklearn.metrics import accuracy_score, auc, confusion_matrix, f1_score, precision_score, recall_score, roc_curve
# 匯入表格庫
import prettytable
# 匯入dot外掛庫
import pydotplus
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

# 資料匯入
df = pd.read_csv('https://raw.githubusercontent.com/ffzs/dataset/master/glass.csv', usecols=['Na','Ca','Type'])

v# 為了決策樹圖示簡潔我們儘量減少分類,和特徵值
dfs = df[df.Type < 3]

# 獲取特徵值
X = dfs[dfs.columns[:-1]].values
# 獲取標籤值
y = dfs['Type'].values - 1

# 將資料37分為測試集合訓練集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=2018)

#### 模型訓練 ####
# 決策樹模型
dt_model = DecisionTreeClassifier(random_state=2018)

# 訓練模型
dt_model.fit(X_train, y_train)

# 對測試集做預測
pre_y = dt_model.predict(X_test)

####模型評估####
# 混淆矩陣
confusion_m = confusion_matrix(y_test, pre_y)

df_confusion_m = pd.DataFrame(confusion_m, columns=['0', '1'], index=['0', '1'])

df_confusion_m.index.name = 'Real'
df_confusion_m.columns.name = 'Predict'

df_confusion_m

在這裡插入圖片描述

# 獲取決策樹的預測概率
y_score = dt_model.predict_proba(X_test)

# ROC
fpr, tpr, thresholds = roc_curve(y_test, y_score[:, [1]])

# AUC
auc_s = auc(fpr, tpr)

# 準確率
accuracy_s = accuracy_score(y_test, pre_y)

# 精準度
precision_s = precision_score(y_test, pre_y)

# 召回率
recall_s = recall_score(y_test, pre_y)

# F1得分
f1_s = f1_score(y_test, pre_y) 

# 評估資料製表
df_metrics = pd.DataFrame([[auc_s, accuracy_s, precision_s, recall_s, f1_s]], columns=['auc', 'accuracy', 'precision', 'recall', 'f1'], index=['結果'])

df_metrics

在這裡插入圖片描述

#### 視覺化ROC##### 
plt.figure(figsize=(8, 7))
plt.plot(fpr, tpr, label='ROC')  # 畫出ROC曲線
plt.plot([0, 1], [0, 1], linestyle='--', color='k', label='random chance')  
# 畫出隨機狀態下的準確率線
plt.title('ROC')  # 子網格標題
plt.xlabel('false positive rate')  # X軸標題
plt.ylabel('true positive rate')  # y軸標題
plt.legend(loc=0)
plt.savefig('x.png')

在這裡插入圖片描述

####儲存決策樹桂枝圖為pdf####
# 決策樹規則生成dot物件
dot_data = export_graphviz(dt_model, max_depth=5, feature_names=dfs.columns[:-1], filled=True, rounded=True)

# 通過pydotplus將決策樹規則解析為圖形
graph = pydotplus.graph_from_dot_data(dot_data)

# 將決策樹規則儲存為PDF檔案
graph.write_pdf('tree.pdf')
# 儲存為jpg圖片
graph.write_jpg('xx.jpg')

在這裡插入圖片描述

決策樹節點資訊:

  • rfm_score是分裂閾值,
  • gini 是在當前規則下的基尼指數,
  • nsamples是當前節點下的總樣本量,
  • nvalue為正例和負例的樣本數量

混淆矩陣

在這裡插入圖片描述

表示分類正確:

  • 真正(True Positive, TP):本來是正例,分類成正例。
  • 假正(True Negative, TN):本來是負例,分類成負例。

表示分類錯誤:

  • 假負(False Positive, FP):本來是負例,分類成正例。
  • 真負(False Negative, FN):本來是正例,分類成負例。

評估指標解釋:

  • auc_s:AUC(Area Under Curve), ROC曲線下的面積。ROC曲線一般位於y=x上方,因此AUC的取值範圍一般在0.5和1之間。AUC越大,分類效果越好。
  • accuracy_s:準確率(Accuracy),分類模型的預測結果中將正例預測為正例、將負例預測為負例的比例,公式為:A = (TP + TN)/(TP + FN + FP + TN),取值範圍[0,1],值越大說明分類結果越準確。
  • precision_s:精確度(Precision),分類模型的預測結果中將正例預測為正例的比例,公式為:P = TP/(TP+FP),取值範圍[0,1],值越大說明分類結果越準確。
  • recall_s:召回率(Recall),分類模型的預測結果被正確預測為正例佔總的正例的比例,公式為:R = TP/(TP+FN),取值範圍[0,1],值越大說明分類結果越準確。
  • f1_s:F1得分(F-score),準確度和召回率的調和均值,公式為:F1 = 2 * (P *R) / (P + R),取值範圍[0,1],值越大說明分類結果越準確。