天天看點

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

作者:python老師lisa

何為分類分析

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

在機器學習的術語中,[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
           
python資料分析:分類分析(classification analysis)
# 擷取決策樹的預測機率
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
           
python資料分析:分類分析(classification analysis)
#### 可視化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')
           
python資料分析:分類分析(classification analysis)
####儲存決策樹桂枝圖為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')
           
python資料分析:分類分析(classification analysis)

決策樹節點資訊:

rfm_score是分裂門檻值,

gini 是在目前規則下的基尼指數,

nsamples是目前節點下的總樣本量,

nvalue為正例和負例的樣本數量

混淆矩陣

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

表示分類正确:

真正(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],值越大說明分類結果越準确。

繼續閱讀