日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

逻辑回归分类——信用卡诈骗

發布時間:2023/12/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 逻辑回归分类——信用卡诈骗 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

邏輯回歸,也叫作 logistic 回歸。雖然名字中帶有“回歸”,但它實際上是分類方法,主要解決的是二分類問題,當然它也可以解決多分類問題,只是二分類更常見一些。

應用場景:

  • 廣告點擊率
  • 是否為垃圾郵件
  • 是否患病
  • 金融詐騙
  • 虛假賬號

原理

在邏輯回歸中使用了 Logistic 函數,也稱為 Sigmoid 函數。Sigmoid 函數是在深度學習中經常用到的函數之一,函數公式為:

函數的圖形如下所示,類似 S 狀:

?

在 sklearn 中,我們使用 LogisticRegression() 函數構建邏輯回歸分類器,函數里有一些常用的構造參數:

  • penalty:懲罰項,取值為 l1 或 l2,默認為 l2。當模型參數滿足高斯分布的時候,使用 l2,當模型參數滿足拉普拉斯分布的時候,使用 l1;
  • solver:代表的是邏輯回歸損失函數的優化方法。有 5 個參數可選,分別為 liblinear、lbfgs、newton-cg、sag 和 saga。默認為 liblinear,適用于數據量小的數據集,當數據量大的時候可以選用 sag 或 saga 方法。
  • max_iter:算法收斂的最大迭代次數,默認為 10。
  • n_jobs:擬合和預測的時候 CPU 的核數,默認是 1,也可以是整數,如果是 -1 則代表 CPU 的核數。
  • 模型評估指標

    舉個例子,對于機場安檢中恐怖分子的判斷,就不能采用準確率對模型進行評估??植婪肿拥谋壤菢O低的,因此當用準確率做判斷時,如果準確率高達 99.999%,就說明這個模型一定好么?

    其實正因為現實生活中恐怖分子的比例極低,就算不能識別出一個恐怖分子,也會得到非常高的準確率。因為準確率的評判標準是正確分類的樣本個數與總樣本數之間的比例。因此非恐怖分子的比例會很高,就算識別不出來恐怖分子,正確分類的個數占總樣本的比例也會很高,也就是準確率高。實際上應該更關注恐怖分子的識別。

    數據預測的四種情況:TP、FP、TN、FN。第二個字母 P 或 N 代表預測為正例還是負例,P 為正,N 為負。第一個字母 T 或 F 代表的是預測結果是否正確,T 為正確,F 為錯誤。

    所以四種情況分別為:

  • TP:預測為正,判斷正確;
  • FP:預測為正,判斷錯誤;
  • TN:預測為負,判斷正確;
  • FN:預測為負,判斷錯誤。
  • 精確率 P = TP/ (TP+FP),對應上面恐怖分子這個例子,在所有判斷為恐怖分子的人數中,真正是恐怖分子的比例。

    召回率 R = TP/ (TP+FN),也稱為查全率。代表的是恐怖分子被正確識別出來的個數與恐怖分子總數的比例。

    有一個指標綜合了精確率和召回率,可以更好地評估模型的好壞。這個指標叫做 F1,用公式表示為:

    F1 作為精確率 P 和召回率 R 的調和平均,數值越大代表模型的結果越好。

    實例

    信用卡詐騙分析

    數據鏈接:https://pan.baidu.com/s/14F8WuX0ZJntdB_r1EC08HA 提取碼:58gp

    import pandas as pd from matplotlib import pyplot as plt import seaborn as sns import numpy as np from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.metrics import confusion_matrix, precision_recall_curve import itertoolsclass CreditFraud:# 混淆矩陣可視化def plot_confusion_matrix(self, cm, classes, normalize=False, title='Confusion matrix', cmap=plt.cm.Blues):plt.rcParams['font.sans-serif'] = ['SimHei']plt.figure()plt.imshow(cm, interpolation='nearest', cmap=cmap)plt.title(title)plt.colorbar()tick_marks = np.arange(len(classes))plt.xticks(tick_marks, classes, rotation=0)plt.yticks(tick_marks, classes)thresh = cm.max() / 2for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):plt.text(j, i, cm[i, j],horizontalalignment='center',color='white' if cm[i, j] > thresh else 'black')plt.tight_layout()plt.ylabel('True label')plt.xlabel('Predicted label')plt.show()# 顯示模型評估結果def show_metrics(self, cm):tp = cm[1, 1]fn = cm[1, 0]fp = cm[0, 1]tn = cm[0, 0]print('精確率:{:.3f}'.format(tp / (tp + fp)))print('召回率:{:.3f}'.format(tp / (tp + fn)))print('f1值:{:.3f}'.format(2 * (((tp / (tp + fp)) * (tp / (tp + fn))) / ((tp / (tp + fp)) + (tp / (tp + fn))))))# 繪制精確率-召回率曲線def plot_precision_recall(self, recall, precision):plt.rcParams['font.sans-serif'] = ['SimHei']plt.step(recall, precision, color='b', alpha=0.2, where='post')plt.fill_between(recall, precision, step='post', alpha=0.2, color='b')plt.plot(recall, precision, linewidth=2)plt.xlim([0.0, 1])plt.ylim([0.0, 1.05])plt.xlabel('召回率')plt.ylabel('精確率')plt.title('精確率-召回率 曲線')plt.show()# 顯示交易筆數,欺詐交易筆數def show(self, data):# 設置plt正確顯示中文plt.rcParams['font.sans-serif'] = ['SimHei']# 繪制類別分布plt.figure()ax = sns.countplot(x='Class', data=data)plt.title('類別分布')plt.show()num = len(data)num_fraud = len(data[data['Class'] == 1])print('總交易筆數:', num)print('詐騙交易筆數:', num_fraud)print('詐騙交易比例:{:.6f}'.format(num_fraud / num))# 詐騙和正常交易可視化f, (ax1, ax2) = plt.subplots(2, 1, sharex='True', figsize=(10, 8))bins = 50ax1.hist(data.Time[data.Class == 1], bins=bins, color='deeppink')ax1.set_title('詐騙交易')ax2.hist(data.Time[data.Class == 0], bins=bins, color='deepskyblue')ax2.set_title('正常交易')plt.xlabel('時間')plt.ylabel('交易次數')plt.show()def logic_regress(self, data):self.show(data)# 對Amount進行標準化data['Amount_Norm'] = StandardScaler().fit_transform(data['Amount'].values.reshape(-1, 1))# 特征選擇y = np.array(data.Class.tolist())# y = data.Class.valuesdata_new = data.drop(['Time', 'Amount', 'Class'], axis=1)X = np.array(data_new.values)trian_x, test_x, train_y, test_y = train_test_split(X, y, test_size=0.1, stratify=y, random_state=33)# 邏輯回歸分類clf = LogisticRegression(n_jobs=-1)clf.fit(trian_x, train_y)predict_y = clf.predict(test_x)# 預測樣本的置信分數score_y = clf.decision_function(test_x)# 計算混淆矩陣cm = confusion_matrix(test_y, predict_y)class_names = [0, 1]# 顯示混淆矩陣self.plot_confusion_matrix(cm, classes=class_names, title='邏輯回歸 混淆矩陣')# 顯示模型評估分數self.show_metrics(cm)# 計算精確率、召回率、閾值用于可視化precision, recall, thresholds = precision_recall_curve(test_y, score_y)self.plot_precision_recall(recall, precision)if __name__ == '__main__':data_ori = pd.read_csv(r'C:\My_data\Study\數據分析實戰\credit_fraud\creditcard.csv')print(data_ori.describe())credit = CreditFraud()credit.logic_regress(data_ori)

    ?

    總結

    以上是生活随笔為你收集整理的逻辑回归分类——信用卡诈骗的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。