queen乐队,走近数据算法——逻辑回归(Logistic Regression),湘西赶尸

作者:我叫丶钱小钱    Python爱好者社区专栏作者

简书:https://www.jianshu.com/u/7e54016a5a06


特别声明:本文仅学习沟通,感兴趣的朋友能够留言相互评论。




文章简介


本文是在学习进程中经过自己对模型的了解及复盘收拾,并不对代码逻辑进行解说,文中外链材料都是在学习进程中觉得比较简略了解的材料,能够作为参阅,原本不想写那么长的,越写发现越写不完......
数据来历:Kaggle下载 creditcard.csv 信用卡诈骗数据,数据做过脱敏处理,可自行下载。


模型介绍


一元线性回归是一种很简略了解的模型,就相当于 y = f(x) = ax + b,标明自变量x与因变量y的联系。那么x0,x1,x2,会生成y0,y1,y2其实(x0,y0)、(x1,y1)便是散布在二维向量间的多个点,咱们能够拟合一个线性方程:y =0 +1*x1 +2*x2 +3*x3 +...+n*xn并经过最小二乘法估量各个系数的值。最小二乘法浅显解说:https://www.zhihu.com/question/20447622



那么究竟什么是逻辑回归?


这儿又要讲到一个Sigmoid函数,Logistic回归算法根据Sigmoid函数,或许说Sigmoid便是逻辑回归函数。下图个人觉得十分好了解,g(z)函数便是Sigmoid函数,它将线性拟合h(x)函数作为参数z带入公式,线性方程咱们知道他的x,y能够是∞,那么经过Sigmoid函数之后能够将y的值域规模压缩到(0,1),留意这是开区间,它仅无限挨近0和1,这效果其实便是终究二分类的概率值,一般默许概率大于等于0.5则默许为1,小于0.5则为0,阀值能够设置。


用一句话来说便是:逻辑回归假定数据遵守伯努利散布,经过极大化似然函数的办法,运用梯度下降来求解参数得出分类概率,经过阈值过滤来到达将数据二分类的意图。伯努利散布又称二印加祖玛项散布,是无数个独立试验的正样例成功次数的概率散布:

https://baike.baidu.com/item/%E4%BA%8C%E9%A1%B9%E5%88%86%E王聚民5%B8%83/1442377?fr=aladdin


最大似然法浅显解说

http://www.360doc.com/content/17/0511/23/42200978_653134402.shtml


数据调查


先看样本数据 阿穆隆入狱source_data.head(3)
字段名都被做过特别处理,Class为终究的标识(Label)看到一切的特征(Feature)都在(1,-1)间,但Amount的数值动摇规模较大,机器学习中其实就等于转化为数学问题,数据按巨细来界定权重,Amount大重要程度大,所以在这需求对Amount进行数据规范


数据规范化(Normalization)


常用的2个规范化办法 : Z-Score 和 Min_Max 这两种规范化办法不光在机器学习中有用,平常多维数据简略归一拉到一个水平线上加权拟定系数也是常用到这两个办法。

1、Min_Max 规范化将原始数据线性化的办法转换到[0,1]的规模,归一化房子能租给乐伽公司吗公式如下:


2、Z-Score 归一化办法将原始数据集归一化为均值为0、方差1的数据集,那么它的阈值规模天然为[-1,1]归一化公式如下:

# 1、StandardScaler便是z-score办法  
# 2、MaxMinScaler便是min_max办法
from sklearn.preprocessing import StandardScaler 
source_data['New_Amount'] =  StandardScaler().fit_transform(source_data['Amount'].values.reshape(-1,1))
# StandardScaler参数只承受矩阵
data = source_data.drop(columns=['Amount','Time'])


独av在线视频观看网站热编码(One-Hot Encoding)


是不是现已各种术语弄得快抛弃了? 画了一张图,或许不是很谨慎但我觉得很好了解



便是把离散变量作为fature,对应fature以1作为标识,这个编码转化进程便是One-Hot Encoding,还有一种编码叫LabelEncoder便是将公司名变成类别值


样本重采样(Resample)


# 检查正负样本label差异
pd.value_counts(source_data['Class'])



样本重采样是对样本Label数量不均衡处理,这儿能够有2种处理办法:欠采样(代表算法:EasyEnsemble) 、 过采样(代表算法:SMOTE) ,两种办法概念其实很简略。


1、欠采样:即去除一些反例使得正反例数目挨近,再进行学习。因为丢掉许多反例,会使得练习集远小于初始练习集,所以有或许导致欠拟合。

2、过采样:添加一些正例使得正反例数目挨近,然后再学习。需求留意的是不能仅仅对初始正例样本重复采样,不然导致严峻的过拟合,SMOTE算法顶用用到了另一种机器学习的算法KNN(K附近取样算法)。


from imblearn.over_sampling import SMOTE
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import confusion_matrix

# 数据会集正反lable相差悬殊,需进行重采样
# 重采样常用办法有2种,1、欠采样 代表算法:EasyEnsemble 2、过采样 代表算法:SMOTE

# 先对数据进行切分
labels = data['Class']
features = data.drop(columns=['Class'])

x_train, x_tes内卫官t, y_train , y_test = train_test_split(features,
  男王妃;                                                  labels,
                                                    test_size = 0.3,
&日加立nbsp;      &nbsqueen乐队,走近数据算法——逻辑回归(Logistic Regression),湘西赶尸p;                                            random_state = 0)

# 这儿进行SMOTE过采样的办法
over_sample = SMOTE(random_state=0)
os_x_train , os_y_train = over_sample.fit_s翟力通ample(x_train ,y_train)
os_x_train = pd.DataFrame(os_x_train)
os_y_train = pd.DataFrame(os_y_train)


穿插验证(Cross - Validation)


用来验证分类器的功能一种统计分析办法,基本思想是把在某种意义下将原始数据(dataset)进行分组,一部分做为练习集(train set),另一部分做为验证集(validation set),首要用练习集对分类器进行练习,在运用验证集来测验练习得到的模型(model)



丢失函数(Loss Function)


看到一个比较简略了解的说法如下:

咱们假定直线的方程为Y=a0+a1X(a为常数系数)。假定a0=10 a1=3 那么Y=10+3X


上面的事例它的肯定丢失函数求和核算求得为:6,这个函数就称为丢失函数(loss function),或许叫价值函数(cost function),咱们期望咱们猜测的公式与实践值差值越小越好,所以就界说了一种衡量模型好坏的办法。

公式Y-实践Y的肯定值,数学表达式:


为后续数学核算便利,咱们一般运用平方丢失函数替代肯定丢失函数,公式Y-实践Y的平方,数学表达式:


还有在下面讲到正则化的部分,丢失函数 = 差错部分(loss term) + 正则化部分(regularization term)


正则化赏罚

常用正则范数:L1正则、L2正则
1、L2正则化赏罚项(为赏罚力度权重):
loss = loss + 1/2w ,w为显着动摇状况,经过过W去判别模型终究loss值,越低模型作用越好
2、L1正则化赏罚项 (为赏罚queen乐队,走近数据算法——逻辑回归(Logistic Regression),湘西赶尸力度权重):
loss = loss + |w| ,w为显着动摇状况,经过过W去判别模型终究loss值,越低模型作用越好
参加正则化的意图:避免过拟合、束缚(约束)要优化的参数



混杂矩阵(Confusion Matrix)


首要它长这样,就一个多维矩阵,呵呵!!统计学就术语能够让咱们从抛弃到溃散。咱们从混杂矩阵的4个根底目标中能够衍生出各类评价目标,模型好坏都靠这些目标进行评价。

感觉许多材料讲的不行浅显,个人了解给咱们翻译一下,咱们先把正例和反例替换成比较浅显的"买"和"不买":
真实例(True Positive,TP):真实状况是"买",猜测效果也是"买",TP表明正例猜测成功次数。
假正例(False Positive,FP):真实状况是"不买",猜测效果也是"买",FP表明负例猜测过错次数。
假负例(False Negative,FN):真实状况是"买",猜测效果也是"不买",FN表明正例猜测过错次数。
真负例(True Negative,TN):真实状况是"不买",猜测效果也是"不买",TN表明负例猜测成功次数。

现在了解了吧,其实很简略,再来看下常用的衍生目标的意思。
模型精度(Accuracy):Accuruzerme官网acy = (TP + TN) / (TP + FP + TN + FN)
一般状况下,模型的精度越高,阐明模型的作用越好。
准确率,又称查准率(Precision,P):Precision = TP / (TP + FP)
一般状况下,查准率越高,阐明模型的作用越好。
召回率,又称查全率(Recall,R):Recall = TP / (TP + FN)
一般状况下,Recall越高,阐明有更多的正类样本被模型猜测正确,模型的作用越好。
F1值(F1-Score):F1 Score = P*R/2(P+R),其间P和R分别为 precision 和 recall
一般状况下,F1-Score越高,阐明模型的作用越好。

那么咱们再来看几个图形目标
真阳性率(True Positive Rate,TPR ):TPR = TP / (TP+FN)
等于Recall,一般状况下,TPR 越高,阐明有更多的正类样本被模型猜测正确,模型的作用越好。
假阳性率(False Positive Rate,FPR ):FPR= FP / (FP+TN)
一般状况下,FPR 越低,阐明有更多的负类样本被模型猜测正确,模型的作用越好。


ROC(Receiver Operating Characteristic):ROC曲线的纵坐标为 TPR,横坐标为 FPR
AUC(Area Under Curve):ROC曲线下的面积,很显着,AUC 的效果不会超越 1,一般 ROC 曲线都在 y = x 这条直线上面,所以,AUC 的值一般在 0.5 ~ 1 之间,面积越大模型作用越好。

以上都是很重要的模型评价的常用目标,代码如下


from sklearn.metrics import roc_curve, auc
# y = np.array([1,1,2,2])
# pred = np.array([0.1, 0.4, 0.35, 0.8])
fpr, tpr, thresholds = roc_curve(y, pred, pos_label=1)
fpr      # array([ 0. ,  0.5,  0.5,  1. ])
tpr      # array([ 0.5,  0.5,  1. ,  1. ])
thresholds      #array([ 0.8 ,  0.4 ,  0.35,  0.1 ])
auc(fpr, tpr)


那么这张图咱们现在就相当好了解了吧。


以下两个链接对混杂矩阵及涉及到的目标叙述的十分了解易懂,还不清楚的能够点开看阅览。
混杂矩阵及评价目标相关扩展材料1,外链

混杂矩阵及评价目标相关扩展材料2,外链


混杂矩阵图例


为了漂亮,做了混杂举证图例展现,其实假如平常完全能够,用上面一般矩阵方式进行调查


import itertools
def plot_confusion_matrix(cm, 
                          classes,
                 &nqueen乐队,走近数据算法——逻辑回归(Logistic Regression),湘西赶尸bsp;        normalize=False,
                          title='Confu幼女被sion matrix',
                          cmap=plt.cm.Blues)
:

    """
    This function prints and plots the confusion matrix.
    Normalization can be applied by setting `normalize=True`.
    """

    if normalize:
        cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]
#         print("Normalized confusion matrix")
    else:
        pass
#         print('Confusion matrix, without 张作琪;normalization')

    im = plt.imshow(cm, interpolation='nearest', cmap=cmap, vmax = cm.max() / 3.)
    plt.title(title,fontsize = 16)
    plt.colorbar(im,shrink=0.63,pad=0.05
  &nqueen乐队,走近数据算法——逻辑回归(Logistic Regression),湘西赶尸bsp; tick_marks = np.arange(len(classes))
    plt.xticks(tick_marks, classes, rotation=0,fontsize = 14)
    plt.yticks(tick_marks, classes,fontsize = 1479p,rotation=90)

#     fmt = '.2f' if normalize else 'd'
    thresh = cm.max() / 2.
    for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):
        plt.text(j, i, format(cm[i, j]),
                 horizontalalignment="center",
                 fontsize = 16,
                 color="white" if cm[i, j] > thresh else "black")

    plt.tight_layout()
#     plt.ylabel('True label',fontsize = 14)
#     plt.xlabel('Predicted label',fontsize = 14)

# 模型评价规范 re_call = TP/(TP+NF)
plt.figure(figsize=(12,6)) 

for i,t in enumerate(range(3,9),start=1):
    thresholds = t / 10
    y_proba = lr.predict_proba(x_test.values)[:,1] > thresholds
    plt.subplot(2,3,i)
  &queen乐队,走近数据算法——逻辑回归(Logistic Regression),湘西赶尸nbsp; matrix = confusion_matrix(y_test, y_proba)
    plot_confusion_matrix(matrix, classes=['Label_0','Label_1'],title = 'Thresholds > %s' % thresholds)
#     print(classification_report(y_test, y_proba))



模型评价(Model Evaluation)


模型评价常用的包含了上面说到的穿插验证,丢失函数,正则化赏罚,混杂矩阵,FPR,TPR(也能够称为recall),ROC,AUC,F1-Score
下面不只做了一次5层的穿插验证,还用了用了L1赏罚项,不断用赏罚系数去调整模型的精确度,承认赏罚系数,从效果图中能够看到,模型精确度不断在提高。


# 穿插验证预备,切分数据集
def kfold_result_info(x,y,n=5):
    os杜塞尔多夫气候_x_train = x
    os_x_train = y
    # K-fold穿插验证
    kfold = KFold(len(os_y_train),n_folds= n ,shuffle=Fals总裁前夫休想复婚e,random_state=0)
    for num in range(5):
    #   c_param 为参数赏罚力度权重,代入不断测验,结构参数
        c_param = 0.01 * 10 ** num
 &n韦小宝之古今奇缘bsp;      print('Regularization L1 Param %s :' %(c_param))
        recall_list = []

        for i ,val_idx in enumerate(kfold, start=1):
    #       树立逻辑回归测验模型
            lr = LogisticRegression(C = c_param, penalty='l1')
            lr.fit(os_x_train.iloc[val_idx[0],:], os_y_train.iloc[val_idx[0],:].values.ravel())
            os_pre_result = lr.predict(os_x_train.iloc[val_idx[1],:].values)
            # 模型评价规范 re_call = TP/(TP+NF)
            re_call = recall_score(顾颜陆野os_y_train.iloc[val_idx[1],:].values,os_pre_result)
            recall_list.append(re_call)

   queen乐队,走近数据算法——逻辑回归(Logistic Regression),湘西赶尸;&nbsqueen乐队,走近数据算法——逻辑回归(Logistic Regression),湘西赶尸p;        print('\t Cross-val ReCall_Score: %s' % re_call)

        mean_score = np.mean(recall_list)
        print('\nRound%s Mean Score : %s' % (num + 1, mean_score))
        print('\n-----------------------------------------------')




往期精彩必读文章(单击就可检查):

  1. 美国科学院院士、图灵奖得主:约翰•爱德华•霍普克罗夫特——深度学习

  2. 南京大学教授:周志华——深度森林:探究深度神经网络以外的办法

  3. 斯坦福大学人工智能试验室主任:李飞飞——ImageNet之后,核算机视觉研讨最新发展

  4. 水兵工程大学教授:贲可荣——人工智能技能及其使用发展

  5. 清华大学:刘洋——根据深度学习的机器翻译

  6. 国防科技大学教授:殷建平——核算机科学理论的曩昔、现在与未来

  7. 清华大学软件学院院长——刘云浩:与高中生对话人工智能

  8. 【原创】|日本理化学研讨所先进智能研讨中心主任——Masashi Sugiyama:弱监督机器学习研讨新发展

  9. 「人物特写」清华大学邓志东:“特征提取+推理”的小数据学习才是AI兴起的要害

  10. 明略讲堂 | 清华马少平教授详解“人工智能能做什么?”

  11. 【原创】|西安电子科大——焦李成:人工智能年代后深度学习的应战与考虑

  12. Michael I. Jordan——核算思想、揣度思想与数据科学

  13. 【高叉比基尼原创】王腾跃:生成式对立网络的机会与应战

  14. 【原创】|微软亚洲研讨院——刘铁岩:深度学习前沿

  15. 清华大学教授:孙富春——认知年代人工智能与机器人

  16. 清华大学:朱军博士——When Bayes meets Big Data

  17. 加州大学伯克利分校:马毅——低维结构和高维深模型(视觉)数据

  18. 加州大学伯克利分校核算机系教授:Dawn SONG——AI怎么树立一个更强的防护体系

  19. 清华大学:刘知远——常识表明学习及其使用

  20. 李飞飞和ImageNet的洪荒之力

  21. 清华大学教授:孙富春——教育机器人核心技能展望

  22. 从高端人才装备看全国第四轮核算机科学与技能专业一级学科评价效果

  23. 长江学者、北京大学教授:黄铁军——人工智能的曩昔、现在和未来

 24.图灵奖得主Hamming的22年前经典讲演:怎么做研讨,才干不被前史忘记

25.当这位70岁的Hinton白叟还在尽力推翻自己积累了30年的学术效果时,我才知道什么冯秀梅的张狂叫做生命力(附Capsule最全解析)

26.我国的学术江湖有多险峻?



点击展开全文

上一篇:

下一篇:

相关推荐