持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第5天,点击查看活动详情
分类问题
分类是预测样本所属类别的一类问题。目标是给定输入样本x,将其分配给种类别的一种,如果称为二分类,否则为多分类。 二分类可以解决任意类别数的多分类问题,有one-vs-one和one-vs-all两种方案
- one-vs-one 多轮二分类,每次区分两种类别和。共进行次分类,理想情况下仅有1种类别每次都胜出,预测结果为
- one-vs-all 多轮二分类,每次区分与非。共进行次分类。理想情况下给予的分数是所有次分类的最高值,预测结果为
线性分类模型
线性模型
线性模型是传统机器学习方法中最简单最常用的分类模型,用一条线性的直线或高维平面将数据一分为二。线性模型由特征函数以及权重向量组成
public class LinearModel implements ICacheAble {
/**
* 特征函数,将字符串形式的特征映射为独一无二的特征id
*/
public FeatureMap featureMap;
/**
* 特征权重
*/
public float[] parameter;
}
特征向量:描述样本特征的向量称为特征向量
特征提取:构造特征向量的过程称为特征提取
特征函数:用来提取每种特征的函数
指示函数:特征函数是指示函数的一个实例
/**
* 特征提取
*
* @param text 文本
* @param featureMap 特征映射
* @return 特征向量
*/
protected abstract List<Integer> extractFeature(String text, FeatureMap featureMap);
每个具体问题的特征提取是不同的,需要根据具体问题创建子类具体实现。返回的特征向量中1的数量更少,所以只需要记录为1的下标即可。样本分布的空间称为样本空间,收集大量样本后会得到一个密集的样本空间。数据转换为特征向量,分类问题就能转换为对样本空间的分割
数学语言描述:定义特征向量,第i个样本的特征为,相应的标签为。则训练集可以表示为M个二元组,测试集则是一系列标签位置的样本点
决策边界与分离超平面
将区域分为两个部分,对于样本落入对应的区域就能预测它的标签。这样的区域是决策区域,边界称为决策边界 二维空间中,决策边界是直线,则产生该决策边界的模型为线性分类模型。
三维空间中的线性模型用平面做决策,任意维度空间中的线性决策边界统称为分离超平面。
二维空间中的直线方程为,推广到D维空间,分离超平面方程为,其中是权重,是偏置截距。为了统计将也看作权重
,分离超平面的方程简化为权重向量和特征向量的内积形式:
/**
* 分离超平面解码
*
* @param x 特征向量
* @return sign(wx)
*/
public int decode(Collection<Integer> x) {
float y = 0;
for (Integer f : x)
y += parameter[f];
return y < 0 ? -1 : 1;
}
如果数据集中所有样本都可以被分离超平面分割,则称该数据集线性可分。对于线性不可分的数据,定义更多特征或使用特殊函数将数据映射到高维空间中。