十、逻辑分类器
1.预测函数
g(z) = 1 / (1+e^-z)
z = t0 + t1x1 + t2x2 + … + tnxn
h(x1, …, xn) = 1 / (1+e^-(t0 + t1x1 + t2x2 + … + tnxn))
J(t0, …, tn) = sigma((h(x1, …, xn) - y)^2) / 2m
t0, …, tn ? -> J(t0, …, tn) min
若可证明K(t0, …, tn)和J(t0, …, tn)是同极函数,则可以通过使K函数取极值的模型参数(t0, …, tn)间接地表示使成本函数J取极小值的参数。
J(t)+r||t||(l1/l2(缺省))
||t||(l1):t向量各元素绝对值之和
||t||(l2):t向量各元素平方值之和
r||t||称为正则项,避免由于t向量过大造成模型过拟合,其中r称为正则强度,越大正则强度越高,对t的惩罚力度越大,反而反之。
代码:log1.py
多元分类:首先把问题转化为二元分类问题,即y=A是一个类别,y={B, C, D}作为另一个类别,然后计算这两个类别的概率,接着,把y=B作为一个类别,把y={A, C, D}作为另一个类别,在计算这两个类别的概率,以此类推,总共需要4个预测函数,选出其中概率最高的那个类别,作为未知类别样本的分类。
坐飞机 不坐飞机
坐火车 不坐火车
自驾 不自驾
A 1 0 0
B 0 1 0
C 0 0 1
D 0 0 0
模型1 模型2 模型3 …
0.97 0.02
0.01 0.01
代码:log2.py
十一、朴素贝叶斯分类器
警察用劣质检测器测试酒驾,该检测器有5%的概率把一个正常司机判断为酒驾,已知有0.1%的司机会酒驾。假设警察拦下一个司机,做呼气测试,检测器显示酒驾,该司机究竟有多大概率真的酒驾?
1000个司机中有1个酒驾,另外999个正常
1/(1+999x5%)=1.96%
贝叶斯定理:
P(A|B)=P(A)P(B|A)/P(B)
P(A|B)P(B)=P(B|A)P(A)
P(A,B) = P(B,A)
B: 检测器显示酒驾的概率
A: 司机真正酒驾的概率
P(A|B)=0.1%x100%/(0.1%x100%+(1-0.1%)x5%)=1.96%
在B事件发生的条件下A事件发生的概率P(A|B),等于A事件发生的概率P(A)乘以A事件发生的条件下B事件发生的概率P(B|A)比上B事件发生的概率P(B)。
求输入样本x被标记为c类的概率p(c|x),当c取所有可能标记事,对应概率最大的就是x的所属的类别。
p(c|x)=p(c)p(x|c)/p(x)
p(c|x)&p(c)p(x|c)=p(c,x)
=p(c,x1,x2,…,xn)
=p(x1,x2,…,xn,c)
=p(x1|x2,…,xn,c)p(x2,…,xn,c)
=p(x1|x2,…,xn,c)p(x2|x3,…,xn,c)p(x3,…,xn,c)
=p(x1|x2,…,xn,c)p(x2|x3,…,xn,c)p(x3|x4,…,xn,c)…p(xn|c)p(c)
朴素:输入样本中的n个特征(x1,x2,…,xn)是条件独立的,其中任何一个特征都与其它特征无关。
=p(x1|c)p(x2|c)p(x3|c)…p(xn|c)p(c)
代码:nb.py
十二、划分训练集和测试集
model_selection12
sklearn.cross_validation.train_test_split(输入, 输出,
test_size=测试集占比, random_state=混合度)->
训练输入, 测试输入, 训练输出, 测试输出
代码:split.py
十三、交叉验证
1.只做一次训练集和测试集的划分,多得到的性能指标不具有一般性,通过多次划分和评估,取其平均值,获得更具一般意义的评价指标。
2.分类问题的三个验证指标
1)查准率(P):对于特定类别,预测正确的样本数/预测样本数
2)召回率(R):对于特定类别,预测正确的样本数/实际样本数
3)F1得分:2PR/(P+R),[0, 1]
sklearn.model_selection.cross_val_score(模型对象,
输入样本, 输出样本, cv=验证次数, scoring=指标名)->
由验证次数个指标值组成的数组
指标名: precision_weighted - 查准率
recall_weighted - 召回率
f1_weighted - F1得分
代码:cv.py
十四、混淆矩阵
混淆矩阵中每行表示一个实际分类的样本,每列表示预测分类的样本,主对角线上的值表示被正确预测的样本数,用主对角线上的值比上其所在列各元素之和就是该类别的查准率,用主对角线上的值比上其所在行各元素之和就是该类别的召回率。理想情况是所有的非零元素都落在主对角线上。
sklearn.metrics.confusion_matrix(实际输出, 预测输出)->混淆矩阵
sklearn.metrics.classification_report(实际输出, 预测输出)->性能报告
代码:cm.py
十五、基于随机森林分类器的汽车品质评估
代码:car.py
十六、验证曲线和学习曲线
1.验证曲线:模型的性能指标与该模型超参数之间的函数关系。
sklearn.model_selection.validation_curve(模型对象,
输入样本,输出样本,超参数名,超参数取值序列,cv=交叉验证次数)->训练集得分列表,测试集得分列表
得分列表矩阵
1次验证 2次验证 …
超参数值1 0.98 0.97 …
超参数值2 0.99 0.96 …
…
代码:vc.py
并不是模型越复杂性能越好。
2.学习曲线:模型的性能指标与训练该模型所使用的训练样本数量之间的函数关系。
sklearn.model_selection.learning_curve(模型对象,
输入样本,输出样本,train_sizes=训练集大小序列,
cv=交叉验证次数)->训练集得分列表,测试集得分列表
得分列表矩阵
1次验证 2次验证 …
训练集大小1 0.98 0.97 …
训练集大小2 0.99 0.96 …
…
代码:lc.py
共同学习,写下你的评论
评论加载中...
作者其他优质文章