何為分類分析
在機器學習和統計中,分類是基于包含其類别成員資格已知的觀察(或執行個體)的訓練資料集來識别新觀察所屬的一組類别(子群體)中的哪一個的問題。例如,将給定的電子郵件配置設定給“垃圾郵件”或“非垃圾郵件”類,并根據觀察到的患者特征(性别,血壓,某些症狀的存在或不存在等)為給定患者配置設定診斷。 。分類是模式識别的一個例子。
在機器學習的術語中,[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],值越大說明分類結果越準确。