一、关于分类(Classification)
1. 什么是分类
分类是机器学习的重要模块,主要用来预测数据的类别标签。
2. 常见分类问题
1) 二分类(Binary Classification)
例:新冠人数增长还是减少?
2) 多分类(Multicalss classification)
互斥。 例:足球比赛结果主队是胜、平还是负?
非互斥。 例:火锅底料的味道是酸、甜还是辣?
3. 分类流程
特征提取与特征选取 >> 分类器处理 >> 获得结果
二、关于特征提取
1. 特征提取与特征选取
特征提取和特征选择统称为降维(DimensionalityReduction)。
1.1 意义
研究如何从众多特征中求出那些对分类识别最有效的特征,从而实现特征空间维数的压缩,即获取一组“少而精”且分类错误概率小的分类待征.
1.2 目的
使在最小维数特征空间中异类模式点相距较远(类间距离较大),而同类模式点相距较近(类内距离较小)。
1.3 特征要求
具有很大的识别信息量: 所提供的特征应具有很好的可分性,使分类器容易判别。
具有可靠性: 对那些模棱两可,似是而非不易判别的特征应该去掉。
具有尽可能强的独立性: 重复的、相关性强的特征只选一个,因为强的相关性并没有增加更多的分类信息,不能要。
数量尽可能少,同时损失的信息尽量小。
1.4 特征提取(Feature Extraction)
常用的方法有主成分分析(PCA),独立成分分析(ICA),线性判别分析(LDA)。
将提取的k维特征子集 [Xs1,Xs2,........Xsk] 映射到新特征 [Ye1,Ye2, ...,Yen]上起到进一步的降维。
特征提取后的新特征是原来特征的一个映射。
1.5 特征选取(Feature Selection)
特征选择是从样本集中选取重要的特征子集。
常用特征选择有过滤法(Filter),包裹法(Wrapper),嵌入法(Embedded)等。
特征选择后的特征是原来特征的一个子集。
image.png
2. 特征选取常用方法
常用方法有过滤法,包裹法和嵌入法。
2.1 过滤法(Filter)
过滤法按照特征的发散性或相关性对各个特征进行评分,设定阈值或者选择阈值的个数,完成特征选择。
特征的发散性:特征在不同样本之间的差异性。
特征的相关性:特征值和目标值之间在数据上的因果关系。
1) 方差法(VarianceThreshold)
方差法通过计算每个特征的均值和方差,设定一个基础阈值。
当该维度的特征方差小于基础阈值时,则丢弃该特征。
这种方法简单高效的过滤了一些低方差的特征,但依赖于阈值的设置。
>>>import os
>>>import pandas as pd
>>>from sklearn.feature_selection import VarianceThreshold
>>>def to_float(func):
>>> def wrapper(*args,**kwargs):
>>> # 将数据改为浮点数
>>> data = func(*args,**kwargs)
>>> for column in data:
>>> if column == 'date': continue # 跳过日期
>>> if str(data[column][1]).isdigit(): # 如果是数字
>>> data[column] = data[column].astype('float') # 将列转为浮点数
>>> return data
>>> return wrapper
>>>@to_float
>>>def read_csv(file):
>>> # 获得文件中的数据
>>> return pd.read_csv(file)
>>>def sort_by_varianceThreshold(dataset,threshold):
>>> # 使用方差法过滤特征
>>> sel = VarianceThreshold(threshold)
>>> return sel.fit_transform(dataset)
>>>if __name__ == '__main__':
>>> file_path = os.path.join('D:\\','dataset','us-counties.csv')
>>> data = read_csv(file_path)#
>>> data_selected = data[['cases','deaths']] # 选出2个特征
>>> threshold=(.7*(1-.7)) # 阈值设置为比例超过70%的特征
>>> print(sort_by_varianceThreshold(data_selected,threshold))
[