一、特征概念
1. 什么是特征
特征是事物可供识别的特殊的征象或标志 在机器学习中,特征是用来描述样本的属性或观测值的变量。它们可以是任何类型的数据,包括数字、文本、图像、音频等。
作用: 特征是训练和评估机器学习模型的基础。好的特征选择和提取能够显著提高模型的性能和准确度。
特征选择: 对一个学习任务而言,有些特征可能很有用,另一些可能没什么用
对当前任务有用的属性称为“相关特征”、没用的属性称为“无关特征”。从给定的特征集合中选出相关特征子集的过程称为“特征选择”。
比如: 有经验的人往往只需要看看根蒂、听听敲声就知道是否好瓜
可以用很多属性来描述一个西瓜,比如色泽、根蒂、敲声、纹理、触感等,这些描述事物的属性称为 特征
2. 特征的类型
数字特征: 如年龄、身高、体重等,这些是可以直接量化的数据。
文本特征: 在文本处理中,特征可能是词袋模型、TF-IDF权重、N-gram模型、主题模型等。
图像特征: 在图像分类或识别中,特征可以是像素值、颜色直方图、纹理描述符、边缘检测等。
音频特征: 在音频处理中,特征可以是MFCC(Mel Frequency Cepstral Coefficients)、Spectrogram等。
3. 常用的图像特征
常用的特征有:Harris角点特征,Canny边缘特征,直方图特征等
-
Harris角点特征
定义:Harris角点检测是一种基于图像灰度强度变化的角点检测算法,它通过计算图像中每个像素点周围邻域内的灰度强度变化来判断该点是否为角点。
特点:
旋转不变性:Harris角点对图像的旋转变化具有一定的鲁棒性。
平移不变性:角点的位置在图像平移后仍能保持不变。
光照变化敏感性:Harris角点对光照变化较为敏感,但可以通过适当的预处理(如归一化)来减轻这种影响。
尺度变化敏感性:Harris角点检测本身不具有尺度不变性,即当图像尺度发生变化时,检测到的角点位置可能会发生变化。但可以通过与其他尺度不变特征提取方法(如SIFT)结合使用来弥补这一不足。
应用场景:
Harris角点检测广泛应用于图像匹配、三维重建、目标跟踪等领域。
-
Canny边缘特征
定义:Canny边缘检测是一种多级边缘检测算法,由John F. Canny于1986年提出。该算法旨在以最优的方式检测图像中的边缘,即尽可能多地标识出实际边缘,同时减少噪声产生的误报。
特点:
低错误率:能够准确标识出图像中的实际边缘,同时减少噪声的干扰。
高定位精度:标识出的边缘位置与实际边缘位置非常接近。
单边缘响应:图像中的边缘只被标识一次,避免了边缘的重复检测。
应用场景:
Canny边缘检测在图像分割、图像识别、图像增强等领域有着广泛的应用。
-
直方图特征
定义:
直方图是一种统计图表,用于展示数据分布的情况。在图像处理中,直方图特征通常指的是图像的灰度直方图或颜色直方图。
特点:
数据分组:将图像的像素值或颜色值分成若干连续的组(区间或桶),每个区间包含一定范围内的数据值。
频数表示:每个区间内的像素数量或颜色数量用柱状图表示,柱子的高度代表该区间内数据的频数或频率。
直观性:直方图能够直观地展示图像的灰度分布或颜色分布情况。
应用场景:
直方图特征在图像分割、图像检索、图像压缩等领域有着广泛的应用。例如,在图像检索中,可以通过比较两幅图像的直方图相似度来判断它们是否相似;在图像压缩中,可以利用直方图的统计特性来优化压缩算法。
4.典型的文本特征
常用的特征有:词属性,词频TF-IDF,词向量,Bag of Words等
- 词属性
词属性通常指的是词语本身所携带的信息,如词性(名词、动词、形容词等)、词长(单词的字符数)、是否为大写、是否包含数字或特殊字符等。这些属性在文本处理中可以用来丰富文本的特征表示,但通常不是直接用于文本分类或聚类的主要特征。词属性更多地被用于文本预处理阶段,如词性标注、停用词过滤等。
- 词频TF-IDF
TF-IDF(Term Frequency-Inverse Document Frequency)是一种用于评估一个词语对于一个文件集或一个语料库中的其中一份文件的重要程度的统计方法。它由两部分组成:
TF(Term Frequency):词频,即某个词在文档中出现的频率。通常,词频越高,表示该词在文档中越重要。但是,为了消除文档长度的影响,TF通常会被归一化,即某个词在文档中出现的次数除以文档的总词数。
IDF(Inverse Document Frequency):逆文档频率,是一个词语普遍重要性的度量。如果包含某个词的文档越少,那么IDF值越大,说明这个词具有很好的类别区分能力。IDF的计算方法是语料库中的文档数除以包含该词的文档数(通常加1以避免分母为0),然后取对数。
TF-IDF的值是TF和IDF的乘积,它综合了词频和逆文档频率两个因素,能够更准确地评估一个词在文档中的重要程度。TF-IDF在文本分类、信息检索等领域有广泛应用。
例子:
#假设我们有以下三个文档:
文档1:我 喜欢 学习 机器学习
文档2:机器学习 是 很 有趣 的
文档3:我 喜欢 编程 和 机器学习
#第一步:计算每个词的词频(TF)
#计算每个文档中每个词的词频:
#文档1:我 喜欢 学习 机器学习
我:1/4 = 0.25
喜欢:1/4 = 0.25
学习:1/4 = 0.25
机器学习:1/4 = 0.25
#文档2:机器学习 是 很 有趣 的
机器学习:1/5 = 0.20
是:1/5 = 0.20
很:1/5 = 0.20
有趣:1/5 = 0.20
的:1/5 = 0.20
#文档3:我 喜欢 编程 和 机器学习
我:1/5 = 0.20
喜欢:1/5 = 0.20
编程:1/5 = 0.20
和:1/5 = 0.20
机器学习:1/5 = 0.20
#第二步:计算逆文档频率(IDF)
文档1:我 喜欢 学习 机器学习
文档2:机器学习 是 很 有趣 的
文档3:我 喜欢 编程 和 机器学习
#计算IDF:
机器学习:log(3 / (1 + 3)) = log(3 / 4) = -0.124
我:log(3 / (1 + 2)) = log(3 / 3) = 0
喜欢:log(3 / (1 + 2)) = log(3 / 3) = 0
学习:log(3 / (1 + 1)) = log(3 / 2) = 0.176
是:log(3 / (1 + 1)) = log(3 / 2) = 0.176
很:log(3 / (1 + 1)) = log(3 / 2) = 0.176
有趣:log(3 / (1 + 1)) = log(3 / 2) = 0.176
的:log(3 / (1 + 1)) = log(3 / 2) = 0.176
编程:log(3 / (1 + 1)) = log(3 / 2) = 0.176
和:log(3 / (1 + 1)) = log(3 / 2) = 0.176
#第三步:计算每个词的TF-IDF
#将每个词的词频乘以其逆文档频率:
#文档1:我 喜欢 学习 机器学习
我:0.25 * 0 = 0
喜欢:0.25 * 0 = 0
学习:0.25 * 0.176 = 0.044
机器学习:0.25 * -0.124 = -0.031
#文档2:机器学习 是 很 有趣 的
机器学习:0.20 * -0.124 = -0.0248
是:0.20 * 0.176 = 0.0352
很:0.20 * 0.176 = 0.0352
有趣:0.20 * 0.176 = 0.0352
的:0.20 * 0.176 = 0.0352
#文档3:我 喜欢 编程 和 机器学习\
我:0.20 * 0 = 0
喜欢:0.20 * 0 = 0
编程:0.20 * 0.176 = 0.0352
和:0.20 * 0.176 = 0.0352
机器学习:0.20 * -0.124 = -0.0248
文档1分析:
“学习”的TF-IDF值最高(0.044),表明在文档1中,“学习”是最重要的词语。
“我”和“喜欢”的TF-IDF值为0,因为它们在多个文档中都很常见。
“机器学习”的TF-IDF值为-0.031,表明它虽然在文档中出现,但在所有文档中都很常见,因此在区分这个文档时并不重要。
文档2分析:
“是”、“很”、“有趣”、“的”这四个词的TF-IDF值相同(0.0352),表明它们在文档2中同等重要。
“机器学习”的TF-IDF值为-0.0248,同样因为它在所有文档中都很常见。
文档3分析:
“编程”和“和”的TF-IDF值最高(0.0352),表明它们在文档3中最重要。
“我”和“喜欢”的TF-IDF值为0,因为它们在多个文档中都很常见。
“机器学习”的TF-IDF值为-0.0248,同样因为它在所有文档中都很常见。
应用TF-IDF结果
这些TF-IDF值帮助我们更准确地理解每个文档的关键内容和主题。例如:
在文档1中,“学习”是关键词,可以推测文档的主题是学习相关内容。
在文档2中,“是”、“很”、“有趣”、“的”这几个词同等重要,可能表示文档在描述机器学习的有趣性。
在文档3中,“编程”和“和”是关键词,可以推测文档的主题涉及编程和机器学习的关系。
通过这些TF-IDF值,我们可以更有效地进行文本分类、主题提取和信息检索,提高处理文本数据的准确性和效率。
- 词向量
词向量是将词语表示为高维空间中的向量,以便进行数学运算和机器学习处理。词向量的表示方法有多种,如One-Hot编码、词嵌入(Word Embedding)等。其中,词嵌入是目前最常用的词向量表示方法,它通过神经网络模型(如Word2Vec、GloVe等)将词语映射到高维空间中,使得语义上相似的词语在向量空间中的距离也较近。词向量能够捕捉词语之间的语义关系,对于文本处理和分析具有重要意义。
比如这个文本就是一句话:今日计划,啥也不干:
分词之后得到的词汇表vocab:[“今日”,“计划”,“啥”,“也”,“不干”,“,” ];这个文本的词汇个数就是N=6,
根据one-hot编码依次转换为词向量:
今日:[1,0,0,0,0,0]
计划:[0,1,0,0,0,0]
啥:[0,0,1,0,0,0]
也:[0,0,0,1,0,0]
不干:[0,0,0,0,1,0]
,:[0,0,0,0,0,1]
- Bag of Words(词袋模型)
Bag of Words(词袋模型)是一种简单的文本表示方法,它将文本看作是一个无序的词汇集合,不考虑词汇之间的顺序和语法关系。在词袋模型中,每个文本被表示为一个向量,向量的维度是词典(或字典)的长度,向量中的每个元素对应词典中的一个词,元素的值是该词在文本中出现的次数(或经过TF-IDF加权后的值)。词袋模型忽略了文本的语法和语序信息,但能够快速地提取文本的特征,适用于一些对文本顺序要求不高的场景。
5. 机器学习数据库UCI
-
概念
UCI(University of California, Irvine)机器学习数据库是一个广泛使用的数据集集合,它包含了用于机器学习研究和实验的各种类型的数据集。这些数据集被广泛应用于分类、聚类、回归、预测等多种机器学习任务的训练和测试。UCI数据库中的数据集涵盖了从生物信息学到经济学,从图像识别到文本处理的多个领域。
UCI机器学习数据库可以通过UCI的官方网站访问,网址通常是:UCI Machine Learning Repository。在这个网站上,你可以浏览、搜索、下载和上传数据集。 -
数据集类型
UCI数据库中的数据集大致可以分为以下几类:
分类(Classification):数据集用于训练分类模型,将输入数据分为预定义的类别之一。
回归(Regression):数据集用于训练回归模型,预测数值型输出。
聚类(Clustering):数据集用于训练聚类模型,将输入数据划分为多个组或簇,使得同一簇内的数据点彼此相似,而不同簇的数据点则不同。
时间序列(Time-Series):数据集包含随时间变化的数据点,用于分析时间相关的模式或预测未来的值。
其他:还包括多标签分类、异常检测等特殊类型的数据集。 -
示例数据集
UCI数据库中一些著名的数据集包括:
鸢尾花数据集(Iris dataset):一个常用的分类数据集,包含三种鸢尾花各50个样本,每个样本有四个特征。
乳腺癌数据集(Breast Cancer Wisconsin (Diagnostic) Dataset):用于诊断乳腺癌的医学数据集,包含良性和恶性肿瘤的样本。
波士顿房价数据集(Boston Housing Dataset):用于回归任务的数据集,目标是预测波士顿地区房屋的价格。
手写数字数据集(MNIST Database of handwritten digits):虽然MNIST不直接托管在UCI上,但它是一个广泛使用的图像识别数据集,展示了机器学习在图像处理中的应用。 -
如何使用UCI数据集
下载数据集:从UCI网站下载你感兴趣的数据集。
数据预处理:根据需要进行数据清洗、转换和特征选择。
选择机器学习算法:根据你的任务类型(如分类、回归等)选择合适的算法。
模型训练:使用处理后的数据训练模型。
模型评估:通过测试集评估模型的性能。
6. Iris数据集
-
简介
机器学习数据库中的Iris数据集,也称为鸢尾花卉数据集(Anderson’s Iris dataset),是一个常用的分类实验数据集,在统计学习和机器学习领域经常被用作示例。
来源:Iris数据集由Fisher在1936年收集整理。
内容:该数据集包含150个数据样本,分为3类,每类50个数据。每个数据样本包含4个属性,即花萼长度(Sepal Length)、花萼宽度(Sepal Width)、花瓣长度(Petal Length)和花瓣宽度(Petal Width),单位均为厘米(cm)。
用途:通过这四个属性,可以预测鸢尾花卉属于三个种类中的哪一类,即山鸢尾(Iris Setosa)、杂色鸢尾(Iris Versicolour)和维吉尼亚鸢尾(Iris Virginica)。 -
数据集特点
多重变量分析:Iris数据集是一类多重变量分析的数据集,适合用于测试和学习分类算法。
线性与非线性可分离:在Iris数据集中,山鸢尾与其他两种鸢尾是线性可分离的,而后两种鸢尾则是非线性可分离的。这一特点使得该数据集在测试分类算法的性能时具有挑战性。 -
数据结构与操作
数据结构:Iris数据集通常以一个二维表的形式呈现,包含150行(样本)和4列(特征)。此外,还有一个目标列(label),用于标识每个样本所属的类别。
数据加载:在Python中,可以使用scikit-learn库中的datasets.load_iris()函数来加载Iris数据集。加载后的数据集包含数据(data)、目标值(target)、特征名(feature_names)和目标名(target_names)等属性。
数据处理:在进行机器学习建模之前,通常需要对数据集进行预处理,包括数据清洗、特征选择、特征缩放等步骤。 -
应用场景
Iris数据集因其简单而全面的特点,常被用于机器学习的入门教学和实验中。通过该数据集,学习者可以掌握分类算法的基本原理和操作步骤,并了解数据预处理、模型训练、评估等机器学习流程。
7. Adult数据集
- 概述
机器学习数据库Adult数据集是一个经典的数据挖掘项目数据集,它来源于美国1994年的人口普查数据库,因此也被称为“人口普查收入”数据集。
来源:美国1994年人口普查数据库。
用途:用于预测居民年收入是否超过5万美元,是一个二元分类问题。
数据量:共包含48842条记录,其中训练数据32561条,测试数据16281条。
类变量:年收入是否超过5万美元,占比分别为23.93)和76.07%(≤5万美元)。 - 属性变量
Adult数据集包含14个属性变量,所采用的特征包括:年龄、工作类型、教育程度、受教育时间、婚姻状况、职业、种族、性别、每周工作小时数、原籍、收入等。
这些变量可以分为数值连续型变量和类别离散型变量两大类:
数值连续型变量(6个):如年龄(age)、每周工作时长(hours-per-week)等。
类别离散型变量(8个):如工作分类(workclass)、教育程度(education)、婚姻状态(marital-status)等。 - 数据预处理
由于Adult数据集是csv格式的数据,因此在进行机器学习建模之前,需要进行一系列的数据预处理工作,包括:
数据读取:使用pandas等库读取csv文件,并设置合适的列名。
缺失值处理:数据集中可能存在缺失值,通常以" ?"表示。需要将这些缺失值转换为NaN或进行填充处理,填充方式可以是众数、均值或特定值等。
数据转换:将类别型变量转换为数值型变量,以便机器学习算法能够处理。这通常通过编码方式实现,如独热编码(One-Hot Encoding)或标签编码(Label Encoding)。
特征选择:根据业务需求和数据特点,选择对预测目标有重要影响的特征进行建模。
数据划分:将数据集划分为训练集和测试集,以便进行模型训练和评估。 - 应用场景
Adult数据集因其丰富的属性和广泛的应用场景,在机器学习领域具有重要地位。它常被用于测试和学习各种分类算法,如决策树、朴素贝叶斯、逻辑回归、随机森林等。通过对该数据集的分析和建模,可以深入了解不同算法在解决分类问题时的性能表现,并为实际业务问题提供解决方案。
8. 特征编码
特征编码是将原始数据(如分类变量、日期、文本等)转换为数值型数据的过程,以便于机器学习模型进行训练和预测。其目的主要是提高数据的可用性和模型的学习效率。
在机器学习和数据预处理中,常见的编码方式包括序号编码(Ordinal Encoding)、独热编码(One-Hot Encoding)、标签编码(Label Encoding)和频数编码(Count Encoding)等。
序号编码(Ordinal Encoding)
序号编码是一种将离散特征的各个类别映射为整数序号的方法。这种方法适用于有序特征,其中类别之间存在一定的顺序关系,但没有明确的意义。例如,在学历中,“本科”、“硕士”和“博士”可以分别映射为1、2和3,因为这三者之间存在明确的顺序关系。序号编码可以通过Pandas的map函数或自定义字典来实现。
独热编码(One-Hot Encoding)
独热编码是最常用的编码方式之一,它将每个离散属性的每个类别创建一个新的二进制特征。对于每个样本,只有一个二进制特征为1,表示它属于对应的类别,其他特征为0。这种方法适用于具有有限数量的类别,并且类别之间没有明确的顺序关系。独热编码可以通过Sklearn的OneHotEncoder类来实现,也可以手动使用Numpy等库来创建。
标签编码(Label Encoding)
标签编码将每个类别映射到整数值,从0开始递增。这种方法对于具有有序关系的类别特征很有用,但它不适用于没有明显顺序的类别。例如,在颜色特征中,“红色”、“绿色”和“蓝色”可以分别映射为0、1和2,但如果这些颜色之间没有明显的顺序关系,使用标签编码可能会引入误解。标签编码可以通过Sklearn的LabelEncoder类来实现。
频数编码(Count Encoding)
频数编码将每个类别替换为该类别在数据集中的频数或出现次数。这种编码方法可以提供关于类别的频率信息,但可能引入一定的信息泄漏。因为模型可能会学习到某些类别在数据集中更频繁出现,从而对这些类别产生偏见。频数编码可以通过Pandas的value_counts函数结合map函数来实现,但需要注意信息泄漏和过拟合的风险。
9.特征选择
-
定义与目的
特征选择是从原始特征集中选择对任务有用的特征的过程。其主要目的是通过减少数据集的维度来提高模型的准确性和性能,同时减少计算复杂度和过拟合的风险。
从一组可用的特征中选择出最优的子集,以提高模型的性能、减少训练时间和复杂度,并帮助更好地理解数据。 -
常见方法
特征选择的方法大致可以分为三类:过滤式特征选择、包裹式特征选择和嵌入式特征选择。- 过滤式特征选择(Filter Methods)
定义:过滤式特征选择是一种预处理方法,它按照某种度量来评估每个特征的重要性,并根据这个度量选择最优的特征子集。
特点:过滤式特征选择通常比较快,因为它可以独立于机器学习模型进行。但其缺点是不能保证选择出来的特征子集一定是最优的。
评估标准:包括基于特征所含信息量的高低(如方差法)、基于相关性(如相关系数、互信息等)等。 - 包裹式特征选择(Wrapper Methods)
定义:包裹式特征选择是一种贪心算法,它在不断地添加或删除特征,并不断地训练机器学习模型来寻找最优的特征子集。
特点:包裹式特征选择可以保证选择出来的特征子集一定是最优的,但其计算复杂度通常比较高,因为它需要不断地训练机器学习模型。
具体方法:包括递归特征消除(RFE)、序贯特征选择(SFS)等。 - 嵌入式特征选择(Embedded Methods)
定义:嵌入式特征选择是一种将特征选择和模型训练结合起来的方法。它通过在模型训练过程中逐步减少特征的维度来实现特征选择。
特点:嵌入式特征选择方案简洁高效,通常被视为集成了过滤法和包裹法两种方案的优点。但其也可能存在不能识别高相关性特征的短板。
具体方法:包括基于Lasso、Ridge Regression等正则化方法的特征选择,以及基于树模型和集成算法的特征选择等。
- 过滤式特征选择(Filter Methods)