您的位置:首页 > 编程语言 > Python开发

python数据分析---实用数据挖掘(四)

2018-03-30 12:53 399 查看
监督学习:什么是好的模型评估结果:
模型其实就是用来描述一组数据的变化情况。



这样就是最完美的一种情况,但是基本不可能出现,一般都是如下:



衡量模型结果:
1.残差
2.残差平方和
3.回归平方和
4.总偏差平方和
残差其实就是观察值和估计值之间的差。



如上图,蓝色的线就是回归曲线,这个例子就是线性回归。
残差就是指真实值和估计值,也就是在那条回归线上的值的差距是多少。



而残差平方和就是残差的平方加起来的总和。
而回归平方和就是估计值减去总数据平均值的平方的总和。



额。。。。少了个平方,SSE那里。

P-value假设检验:
比如现在原假设:
没有喝酒



这个图像的面积,也就是蓝色区域的面积总和应该是1,因为他是发生所有概率的和。这就是正常人的一个分布概率。
P-value:在原假设成立时,出现观测值以及更极端情况下的概率。



而红色的就是喝了酒的,可以看到两个分类是不一样的。
按照上面的分布,其实是可以做一个阈值,超过这个阈值就是喝了酒,没有超过就是正常人。



这个阈值就是根据上面的分布来进行区分。可以人为的重新调整。
但是阈值肯定是在正例和负例的高峰区之间的。
蓝色为正例。
True positive:真阳值,正例判断为正立:


蓝色的区域是正例,也就是没有喝酒,在阈值的左边,也就是说,模型正确的判断了正例的分类。
False positive:假阳值,本来是负例的,被分类成正例:



本来喝了酒的,但是被归类为正例。
True negative:负例归类为负例。



False negative:正例判定为负例。



如果是按照红色区域为正例:
True positive:



True negative:



False positive:



False negative:



正例的不同,判断指标是有区别的。
接下来还要引入几个指标:
alpha:False Positive
beta:False Negative
power:Ture Positive
ROC曲线:工作特征曲线。以真阳值为纵轴,假阳值为横轴。也就是True Positive为纵轴,False Positive为横轴。每改变一个阈值,就有一个点,如图:



如图,随着阈值的改变,ROC会有不同的结果,但是这个图像大致可以看出,基本的一个趋势是在上升的,
4000
其实从图中也可以看出两个的比例一直在变大。
这其实是一个比较好的模型了,离x = y很远,证明正例和假正例相差很大。二如果出现:



如果是这种情况就没得看了,基本靠在45度线上。
判断模型条件:
1.单调递增。
2.没一个点都在45度线的上方。
3.画出的ROC曲线离45度线越远越好。
3.曲线下方的面积就是AUC了。

注意:
P-value:在原假设成立时,出现观测值以及更极端的概率。
False Positive:假阳性,原假设成立时有部分原假设被估计为备择假设。
这两个东西其实有时候计算结果是一样的,但是这两东西不是一个东西。
alpha其实就是一个显著性水平,1-alpha其实就是置信区间,而是否拒绝还是不拒绝原假设一般就是用p-value和alpha比较,alpha是刚刚所说的False Positive。alpha也就是我们所说的第一类错误。






由这些指标就可以得到召回率和准确率。
召回率,覆盖率其实是一个对象:



召回率:True Positive /(True Positive + False Negative)
准确率:True Positive /(True Positive + False Positive)
但是召回率和准确率并不是都是正比的,召回率上升,准确率就会下降;召回率下降,准确率就会上升。
所以新的衡量指标就是F1-score了。
F1-score: 2*TP/(2*TP + FP + FN) 其实是可以看做是一个召回率和准确率的平均结果。

代码来简单实现一下召回率和准确率:import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.metrics import f1_score
y_true =  [0,0,0,0,1,0,0,0,0,1,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0]#真实值
y_pred =  [0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,0,0,1,1,0,0,0,1,0,1]#预测值
f1_score(y_true , y_pred)


from sklearn.metrics import precision_score , recall_score
precision_score(y_true , y_pred)


recall_score(y_true , y_pred)



一上都是二分类的,现在来看一下多分类的。

多分类:
多分类不能直观的,所以一般是采用熵来判断。熵一组信息的混乱程度。


熵公式。



Imbalance问题
做分类的时候,容易出现正负样本相差太大,比如正例900个,负例才50个,这就是一个样本不平衡了。
应对方式:
1.下采样:
900个正例,50个负例,那么就从900个正例抽取50个作为正例,这样两个就一样了。
2.过采样:
生成更多的数据,只有50个负例就可以生成500个了。
但是这种可能会导致过拟合,对高维的数据不好。



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: