sklearn数据集和特征工程

scikit-learn数据集

整理自黑马机器学习教程

学习阶段可用数据集

  • uci
  • kaggle
  • scikit-learn

sklenran数据集

加载

  • datasets.load_*():获取小规模数据集
  • datasets.fetch_*(data_home=None):获取大规模数据集,需要从网络上下载,data_home为数据集下载目录。
from sklearn import datasets

iris = datasets.load_iris()

返回值

均返回datasets.base.Bunch类型数据(继承自字典)

  • data:特征数据数组,二维numpy.ndarray数组
  • target:标签数组
  • DESCR:数据描述
  • feature_names:特征名,
  • target_name:标签名
print(iris)
print(iris["DESCR"])# 数据集描述
print(iris.feature_names)
print(iris.data, iris.data.shape)

数据集划分

一般分为2部分:

  • 训练数据:用于训练,构建模型,一般为70%~80%
  • 测试数据:在模型检验时使用,用于评估模型是否合理

sklearn划分数据集

sklearn.model_selection.train_test_split()

参数含义
x数据集的特征值
y数据集的标签值
test_size测试机的大小,一般为float
random_state随机数种子,相同种子的采样结果相同
return返回顺序为 训练集特征值,测试集特征值,训练集目标值,测试集目标值

特征工程

用专业背景知识和技巧处理数据,决定最终效果的上限

特征提取

将图像、文本等转换为可以用于机器学习的数字特征。

例如文章分类,将文本转换为数值,再通过算法处理。下面分别介绍字典以及文本特征提取

字典特诊提取

sklearn.feature_extraction

from sklearn import feature_extraction
data = [{'city': 'bj', 'temp': 100}, {'city': 'sh', 'temp': 200}, {'city': 'sz', 'temp': 30}]
transfer = feature_extraction.DictVectorizer()# 实例化一个转换器
data_new = transfer.fit_transform(data)
print(transfer.get_feature_names()) # 返回特征值名称

默认返回稀疏矩阵(仅包含非0值的位置,节约内存,提高加载效率),若想要返回矩阵则调用
transfer = feature_extraction.DictVectorizer(sparse=False)

上述代码返回情况:

(0, 0)	1.0
(0, 3)	100.0
(1, 1)	1.0
(1, 3)	200.0
(2, 2)	1.0
(2, 3)	30.0
['city=bj', 'city=sh', 'city=sz', 'temp']

可以发现类别通过one-hot编码转换位数字,再通过记录每个非0值在矩阵中的位置来达到提高加载效率的目的

应用场景:

  1. 数据集中类别特征较多
    1. 将数据集特征转换为字典类型
    2. DictVectorizer转换
  2. 本身数据就是字典类型
文本特征提取

例如分析一篇文章的类型,可以将单词、短语句子等作为特征。

data = ["life is short", "life is too long"]
transfer = feature_extraction.text.CountVectorizer()
data_new = transfer.fit_transform(data)
print(data_new)
print(data_new.toarray())
print(transfer.get_feature_names())

输出结果为:

(0, 1)	1
(0, 0)	1
(0, 5)	1
(0, 2)	1
(0, 4)	1
(1, 1)	1
(1, 0)	1
(1, 6)	1
(1, 3)	1
[[1 1 1 0 1 1 0]
 [1 1 0 1 0 0 1]]
['is', 'life', 'like', 'long', 'python', 'short', 'too']

上面部分为稀疏矩阵形式,下部分为矩阵形式(注意转换为矩阵形式的方式与字典有所区别),矩阵内保存的是每个文本出现的次数。

特征预处理

通过一些转换函数将特征数据转换位更加适合算法模型的过程。

归一化

通过对原始数据变换,将数据映射到[0,1]之间
sklearn的api:

from sklearn import preprocessing

transfer = preprocessing.minmax_scale()

归一化存在一些问题:
数据容易受异常点影响,鲁棒性较差,只适用于传统精确小数据场景。

标准化

处理方式为: x , = x − E ( x ) σ \displaystyle x^, = \frac{x-E(x)}{\sigma} x,=σxE(x)
E(x)为样本均值, σ \sigma σ 为样本方差
sklearn的api:

from sklearn import preprocessing

transfer = preprocessing.StandardScaler()

适用于已有样本足够多的情况下,适合现代嘈杂大数据场景

特征降维

降维

降维:降低随机变量(特征,即矩阵列的个数)的个数,达到特征与特征之间不相关(概率论相关知识)。
主要有两种方式:

  1. Filter过滤式:主要探究特征本身的特点、特征与特征和目标值之间关联
    1. 方差选择法:低方差特征过滤
    2. 相关系数:特征与特征之间的相关程度
  2. Embedded嵌入式:算法自动选择特征(特征与目标值之间的关联)
    1. 决策树:信息熵、信息增益
    2. 正则化:L1、L2
    3. 深度学习

先了解两种过滤式:

  1. 方差选择法:
from sklearn import feature_selection

# 实例化
filters = feature_selection.VarianceThreshold(threshold=0.2)
  1. 相关系数
    r = n ∑ x y   −   ∑ x ∑ y n ∑ x 2   −   ( ∑ x ) 2 n ∑ y 2   −   ( ∑ y ) 2 \displaystyle r = \frac{n\sum xy\,-\,\sum x \sum y}{\sqrt{n\sum x^2\,-\,(\sum x)^2} \sqrt{n\sum y^2\,-\,(\sum y)^2}} r=nx2(x)2 ny2(y)2 nxyxy
    也可以调用相关api
主成分分析(PCA)

将高维数据转换位低维数据的过程,再次过程中可能会舍弃原有数据、创造新的变量。
将维度数据维数进行压缩,尽可能降低原数据的维度(复杂度),损失少量信息。

from sklearn import decomposition
pca = decomposition.PCA(n_components=0.5)

n_components:

  • 小数:保留百分之多少的信息
  • 整数:减少到多少特征
  • ‘mle’:mle算法自动选取维数(mle极大似然估计)

在我本地运行时,pycharm和jupyter notebook 运行出来的结果不一样,pycharm将数据降维成了1维,而jupytor notebook的结果符合预期,求大佬解答

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zccccccc_tz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值