机器学习-特征工程(1)

数据集

可用数据集

kaggle

UCI

scikit-learn

安装scikit-learn包:

pip3 install Scikit-learn

检测:

import sklearn

scikit-learn包含的内容:

  • 分类、聚类、回归
  • 特征模型
  • 模型选择、调优

load_<dataset_name> 本地加载数据,保存在了本地磁盘上,本地加载数据,保存在..datasets\\data目录下的。

datasets.load_boston #波士顿房价数据集  
datasets.load_breast_cancer #乳腺癌数据集  
datasets.load_diabetes #糖尿病数据集  
datasets.load_digits #手写体数字数据集  
datasets.load_files  
datasets.load_iris #鸢尾花数据集  
datasets.load_lfw_pairs  
datasets.load_lfw_people  
datasets.load_linnerud #体能训练数据集  
datasets.load_mlcomp  
datasets.load_sample_image  
datasets.load_sample_images  
datasets.load_svmlight_file  
datasets.load_svmlight_files  

远程加载数据集。

比较大的数据集,主要用于测试解决实际问题,支持在线下载,下载下来的数据,默认保存在~/scikit_learn_data文件夹下,可以通过设置环境变量SCIKIT_LEARN_DATA修改路径,datasets.get_data_home()获取下载路径。 

datasets.fetch_20newsgroups  
datasets.fetch_20newsgroups_vectorized  
datasets.fetch_california_housing  
datasets.fetch_covtype  
datasets.fetch_kddcup99  
datasets.fetch_lfw_pairs  
datasets.fetch_lfw_people  
datasets.fetch_mldata  
datasets.fetch_olivetti_faces  
datasets.fetch_rcv1  
datasets.fetch_species_distributions  

构造数据集
下面以make_regression()函数为例,首先看看函数语法:
make_regression(n_samples=100, n_features=100, n_informative=10, n_targets=1, bias=0.0, effective_rank=None, tail_strength=0.5, noise=0.0, shuffle=True, coef=False, random_state=None)
参数说明:
n_samples:样本数
n_features:特征数(自变量个数)
n_informative:相关特征(相关自变量个数)即参与了建模型的特征数
n_targets:因变量个数
bias:偏差(截距)
coef:是否输出coef标识

datasets.make_biclusters  
datasets.make_blobs  
datasets.make_checkerboard  
datasets.make_circles  
datasets.make_classification  
datasets.make_friedman1  
datasets.make_friedman2  
datasets.make_friedman3  
datasets.make_gaussian_quantiles  
datasets.make_hastie_10_2  
datasets.make_low_rank_matrix  
datasets.make_moons  
datasets.make_multilabel_classification  
datasets.make_regression  
datasets.make_s_curve  
datasets.make_sparse_coded_signal  
datasets.make_sparse_spd_matrix  
datasets.make_sparse_uncorrelated  
datasets.make_spd_matrix  
datasets.make_swiss_roll  

获取数据

sklearn工具下面一共有24个数据集,只要直接导入就可以使用,就像导入一个csv文件一样。

以 datasets.load_boston()为例

from sklearn import datasets
 
iris = datasets.load_iris()
### 打印数据集,可以看到数据集的详细信息
print(iris)
### 获取数据
X = iris.data
### 获取标签
y = iris.target
### 获取标签名称
TarName = iris.target_names
### 获取特征名称
FeaName = iris.feature_names

 数据生成器

datasets.make_moons() 该函数会生成两个交叉的半圆型数据集,可以用做聚类和分类算法的数据集。生成的图形如下图所示:   

### 生成200个数据点的数据
X,y = datasets.make_moons(200)
### 可视化数据
plt.scatter(X[:,0],X[:,1], s=40, c=y, cmap=plt.cm.Spectral)

 

加入noise函数

### 生成数据
X,y = datasets.make_moons(200, noise=0.20)
### 可视化数据
plt.scatter(X[:,0],X[:,1], s=40, c=y, cmap=plt.cm.Spectral)

 

 datasets.make_circles()该函数会生成一个大圆,然后里面包含一个小圆。生成的图形如下图所示:   

X,y = datasets.make_circles(1000)
plt.scatter(X[:,0],X[:,1], s=40, c=y,cmap=plt.cm.Spectral)

为了让数据的分布没有那么工整,通常我们会加上noise参数。同时,会加上factor参数,用于控制大圆和小圆之间的间隔。 

X,y = datasets.make_circles(1000, noise=0.03, factor=0.5)
plt.scatter(X[:,0],X[:,1], s=40, c=y,cmap=plt.cm.Spectral)

数据集的划分 

获取的数据不是全部都拿来训练一个模型,否则无法评估模型。

机器学习一般将数据集划分两部分:

  • 训练数据:用于训练,构建模型。
  • 测试数据:在模型检验时使用,用于评估模型是否有效。

划分比例:

  • 训练集:70% 80% 75%
  • 测试集:30% 20% 30%

数据集划分api

sklearn.model_selection.train_test_split(arrays,*options)

  • x数据集的特征值。
  • y数据集的标签值。
  • test_size测试集的大小,一般为float。
  • random_state随机数种子,不同的种子会照成不同的随机采样结果。相同的种子采样结果相同。
  • return训练集特征值,测试集特征值,训练集目标值,测试集目标值。
from sklearn import datasets
from  sklearn.model_selection import train_test_split

iris=datasets.load_iris()

x_train,x_test,y_train,y_test=train_test_split(iris.data,iris.target,test_size=0.2,random_state=22)
print(x_train,x_train.shape)

因为原数据是150,使用test_size=0.2后,变成120【即150*0.8,test_size默认为0.25】 

特征工程(Feature Engineering)

特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。

特征抽取

  • 机器学习算法->统计方法->数学公式
  • 文本类型->数值

将任意数据(如文本或图像)转换为可用于机器学习的数字特征。

  • 字典特征提取(特征离散化)
  • 文本特征提取
  • 图像特征提取

特征提取API

sklearn.feature_extraction

 字典特征提取

sklearn.feature_extraction.DictVectorizer(sparse=True,...)
  • DictVectorizer.fit_transform(X)   X:字典或者包含字典的的迭代器返回值:返回sparse矩阵。
  • DictVectorizer.inverse_transform(X)   X:array数组或者sparse矩阵 返回值:转换之前数据格式。
  • DictVectorizer.get_feature_names()   返回类别名称。

字典特征提取是把类别->one-hot编码。

from sklearn.feature_extraction import DictVectorizer

data=[{'city':'Beijing','temperature':100},{'city':'Shanghai','temperature':60},{'city':'Shenzhen','temperature':30}]
#实例化一个转化器。
transfer=DictVectorizer(sparse=False)
#调用fit_transform()
data_new=transfer.fit_transform(data)
print("data_new:\n",data_new)

 若不设置sparse,则默认为True。

结果为:

data_new:
   (0, 0)    1.0
  (0, 3)    100.0
  (1, 1)    1.0
  (1, 3)    60.0
  (2, 2)    1.0
  (2, 3)    30.0

  • 该结果是把非0的值,按位置标出来,即sparse矩阵。
  • sparse矩阵节省内存,提高加载效率。

若设置sparse为False,则:

data_new:
 [[  1.   0.   0. 100.]
 [  0.   1.   0.  60.]
 [  0.   0.   1.  30.]]

可用transfer.get_feature_names_out()输出特征名字。

print("特征名字:\n",transfer.get_feature_names_out())
应用场景
  1. pclass,sex 数据集当中类别特征比较多。【1、将数据集的特征->字典类型 2、DictVectorizer转换】
  2. 本身拿到的数据就是字典类型。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值