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
一上都是二分类的,现在来看一下多分类的。
多分类:
多分类不能直观的,所以一般是采用熵来判断。熵一组信息的混乱程度。
熵公式。
Imbalance问题
做分类的时候,容易出现正负样本相差太大,比如正例900个,负例才50个,这就是一个样本不平衡了。
应对方式:
1.下采样:
900个正例,50个负例,那么就从900个正例抽取50个作为正例,这样两个就一样了。
2.过采样:
生成更多的数据,只有50个负例就可以生成500个了。
但是这种可能会导致过拟合,对高维的数据不好。
模型其实就是用来描述一组数据的变化情况。
这样就是最完美的一种情况,但是基本不可能出现,一般都是如下:
衡量模型结果:
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个了。
但是这种可能会导致过拟合,对高维的数据不好。
相关文章推荐
- python数据分析---实用数据挖掘(二)
- python数据分析---实用数据挖掘(三)
- python数据分析---实用数据挖掘(一)
- python数据分析---实用数据挖掘(七)
- python数据分析---实用数据挖掘(五)
- python数据分析---实用数据挖掘(六)
- 【Python数据挖掘课程】九.回归模型LinearRegression简单分析氧化物数据
- Python数据挖掘课程 二.Kmeans聚类数据分析及Anaconda介绍
- Python数据挖掘建模 chapter_6 主成分分析(简)
- 利用python数据分析与挖掘相关资料总结
- python数据挖掘课程 十二.Pandas、Matplotlib结合SQL语句对比图分析
- 【python数据挖掘课程】二十.KNN最近邻分类算法分析详解及平衡秤TXT数据集读取
- 【python数据挖掘课程】十.Pandas、Matplotlib、PCA绘图实用代码补充
- python数据挖掘课程 十三.WordCloud词云配置过程及词频分析
- python数据挖掘和分析(一)
- python数据分析与挖掘学习笔记(1)-基础及准备
- [译] Twitter数据挖掘:如何使用Python分析大数据
- 数据挖掘:实用案例分析
- 【python数据挖掘课程】十七.社交网络Networkx库分析人物关系(初识篇)
- 商品亲和性分析示例 - Python 数据挖掘