特征选择
特征选择原因
-
冗余:部分特征的相关度高,容易消耗计算性能
-
噪声:部分特征对预测结果有负影响
特征选择是什么
特征选择就是单纯地从提取到的所有特征中选择部分特征作为训练集特征,
特征在选择前和选择后可以改变值、也不改变值,但是选择后的特征维数肯
定比选择前小,毕竟我们只选择了其中的一部分特征。
主要方法(三大武器):
-
Filter(过滤式):VarianceThreshold
-
Embedded(嵌入式):正则化、决策树
-
Wrapper(包裹式)
VarianceThreshold方法API:
sklearn.feature_selection.VarianceThreshold
VarianceThreshold语法
-
VarianceThreshold(threshold = 0.0):
删除所有低方差特征 -
Variance.fit_transform(X,y):
X:numpy array格式的数据[n_samples,n_features];
返回值:训练集差异低于threshold的特征将被删除;
默认值是保留所有非零方差特征,即删除所有样本中具有相同值的特征。
VarianceThreshold流程
- 初始化VarianceThreshold,指定阈值为差
- 调用fit_transform
[[0, 2, 0, 3],
[0, 1, 4, 3],
[0, 1, 1, 3]]
示例:
from sklearn.feature_selection import VarianceThreshold
def var():
"""
特征选择-删除低方差的特征
:return: None
"""
var = VarianceThreshold(threshold=0.0)
data = var.fit_transform([[0, 2, 0, 3], [0, 1, 4, 3], [0, 1, 1, 3]])
print(data)
return None
if __name__ == "__main__":
var()
运行结果:
将方差为0的列去掉了
[[2 0]
[1 4]
[1 1]]
其他特征选择方法:神经网络
sklearn降维主成分分析
API:
sklearn. decomposition
PCA(主成分分析)
PCA是一种分析、简化数据集的技术。
目的:是数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量信息。
作用:可以削减回归分析或者聚类分析中特征的数量
PCA语法
-
PCA(n_components=None):
将数据分解为较低维数空间;
n_components为小数,表示保留百分之多少信息,如0.9→保留90%;
n_components为整数,表示减少到的特征数量,一般不用。 -
PCA.fit_transform(X):
X:numpy array格式的数据[n_samples,n_features]
返回值:转换后指定维度的array
PCA流程
- 初始化PCA,指定减少后的维度
- 调用fit_transform
[[2,8,4,5],
[6,3,0,8],
[5,4,9,1]]
示例:
from sklearn.decomposition import PCA
def pca():
"""
主成分分析进行特征降维
:return: None
"""
pca = PCA(n_components=0.9)
data = pca.fit_transform([[2,8,4,5],[6,3,0,8],[5,4,9,1]])
print(data)
return None
if __name__ == "__main__":
pca()
运行结果:
[[ 0. 3.82970843]
[-5.74456265 -1.91485422]
[ 5.74456265 -1.91485422]]
降维案例
按照用户对物品类别的喜好细分降维。
数据:
- products.csv :商品信息
- order_products__prior.csv:订单与商品信息
- orders.csv: 用户的订单信息
- aisles.csv: 商品所属具体物品类别
因为用户和物品类别,没在一个表内,所以需要按照不同表格的相同特征,合并表格信息。
1.合并各表到一张表中
2.建立一个类似行、列数据
交叉表(特殊的分组表)
3.主成分分析
其他降维方法
线性判别分析LDA
机器学习基础
-
机器学习开发流程
-
机器学习模型是什么
-
机器学习算法分类
算法是核心,数据和计算是基础
机器学习算法分类
- 监督学习(预测)
分类(目标值为离散型):k-近邻算法、贝叶斯分类、决策树与随机森林、逻辑回归、神经网络
回归(目标值为连续型):线性回归、岭回归
标注 隐马尔可夫模型 (不做要求)
- 无监督学习
聚类 k-means
监督学习
监督学习(英语:Supervised learning),可以由输入数据中学
到或建立一个模型,并依此模式推测新的结果。输入数据是由
输入特征值和目标值所组成。函数的输出可以是一个连续的值
(称为回归),或是输出是有限个离散值(称作分类)。
无监督学习
无监督学习(英语:Supervised learning),可以由输入数据中
学到或建立一个模型,并依此模式推测新的结果。输入数据是
由输入特征值所组成。
分类问题
概念:分类是监督学习的一个核心问题,在监督学习中,当输出变量取有限个离散值时,预测问题变成为分类问题。最基础的便是二分类问题,即判断是非,从两个类别中选择一个作为预测结果。
分类问题的应用:
分类在于根据其特性将数据“分门别类”,所以在许多领域都有广泛的应用
在银行业务中,构建一个客户分类模型,按客户按照贷款风险的大小进行分类
图像处理中,分类可以用来检测图像中是否有人脸出现,动物类别等
手写识别中,分类可以用于识别手写的数字
文本分类,这里的文本可以是新闻报道、网页、电子邮件、学术论文
回归问题
概念:回归是监督学习的另一个重要问题。回归用于预测输入变量和输出变量之间的关系,输出是连续型的值。
回归问题的应用:
回归在多领域也有广泛的应用
房价预测,根据某地历史房价数据,进行一个预测
金融信息,每日股票走向
机器学习开发流程
sklearn数据集
- 数据集划分
- sklearn数据集接口介绍
- sklearn分类数据集
- sklearn回归数据集
数据集划分
机器学习一般的数据集会划分为两个部分:
训练数据:用于训练,构建模型
测试数据:在模型检验时使用,用于评估模型是否有效
sklearn数据集划分API:
sklearn.model_selection.train_test_split
scikit-learn数据集API介绍
-
sklearn.datasets
加载获取流行数据集 -
datasets.load_*()
获取小规模数据集,数据包含在datasets里 -
datasets.fetch_*(data_home=None)
获取大规模数据集,需要从网络上下载,函数的第一个参数是data_home,表示数据集下载的目录,默认是 ~/scikit_learn_data/
获取数据集返回的类型
load和fetch返回的数据类型datasets.base.Bunch(字典格式)
data:特征数据数组,是 [n_samples * n_features] 的二维numpy.ndarray 数组
target:标签数组,是n_samples 的一维 numpy.ndarray 数组
DESCR:数据描述
feature_names:特征名,新闻数据,手写数字、回归数据集没有
target_names:标签名,回归数据集没有
示例:
from sklearn.datasets import load_iris
li = load_iris()
print("获取特征值")
print(li.data)
print("目标值")
print(li.target)
print(li.DESCR)
运行结果:
获取特征值
[[5.1