2.数据及其预处理

人工智能52

1. 数据样本矩阵

一般数据集的构造形式: 一行一样本,一列一特征,以下为一个示例

姓名 年龄 性别 工作经验 月薪 A 22 男 2 5000 B 23 女 3 6000 C 25 男 3 7000

在数学推导中,常用(x={x_1,x_2,\cdots,x_p}^T)来表示一个样本,用(X={{x^{(1)}}^T,{x^{(2)}}^T,\cdots,{x^{(n)}}^T}^T)来表示数据集。

2.数据预处理及相关 API

sklearn.preprocessing包中提供了一系列的关于数据预处理的工具。

import numpy as np
import sklearn.preprocessing as sp

2.1 标准化

针对于数据的每一列,都减去均值并除以标准差,来抵消掉由于量纲不同而代来的影响。

2.1.1 scale

raw_sample=np.array([
    [17,100,4000],
    [20,80,5000],
    [23,75,5000]
])
std_sample=sp.scale(raw_sample)
print(std_sample)
[[-1.22474487  1.38873015 -1.41421356]
 [ 0.         -0.46291005  0.70710678]
 [ 1.22474487 -0.9258201   0.70710678]]

2.1.2 StandardScaler

scale相比,使用 StandardScaler类类的好处在于:

  1. 可以保存训练集中的参数(均值、方差)直接使用其对象转换测试集数据,
  2. 它可以当作一个学习器放在 Pipline管道中。
ss=sp.StandardScaler()
ss.fit(raw_sample)# 按原始训练集生成规则,即训练的均值和标准差
std_sample=ss.transform(raw_sample)  # 讲规则应用到样本中
test_sample=np.array([
    [20,80,3000],
    [21,88.2500]
])
std_test_sample=ss.transform(test_sample)#将规则应用到测试集中
#也可以将按原始训练集生成规则和将规则应用到原始数据的过程合并为一步
std_sample=ss.fit_transform(raw_sample)

对于其他形式的数据预处理工具,一般的使用方法(fit, transform, fit_transform)都相同。

2.2 范围缩放

将样本矩阵中每一列的的等比例缩放到相同的区间,一般是[0,1]区间。
对于每列数据(x={x_1,x_2,x_3,x_4,\cdots,x_n}),

[ x_i^{*}=\frac{x_i-\min{x}}{\max{x}-\min{x}} ]

mms=sp.MinMaxScaler(feature_range=(0,1))
mms.fit_transform(raw_sample)
array([[0. , 1. , 0. ],
       [0.5, 0.2, 1. ],
       [1. , 0. , 1. ]])

2.3 归一化

有时候每个样本的每个特征具体的值不重要,但是每个样本特征值的占比很重要。

姓名 动画片 剧情片 动作片 喜剧片 A 20 4 50 1 B 10 1000 200 6000 C 80 20 20000 50

假设一个视频网站,A是新注册的会员,BC是老会员,因此在衡量样本相似度(爱好相似)时不能单纯考虑数量,而是考虑每种类中所占的比例。

归一化就是将每个样本缩放到单位范数(每个样本的范数为 1)。

其思想原理是: 对每个样本计算其 p-范数,然后对该样本中每个元素 除以该范数,这样处理的结果是是的每个处理后样本的 p-范数(L1-norm, L2-norm)等于 1。

raw_sample=np.array([
    [20,4,50,1],
    [10,1000,200,6000],
    [80,20,20000,50]
])
normalized_sample = sp.normalize(raw_sample, norm='l1')
print(normalized_sample)
[[0.26666667 0.05333333 0.66666667 0.01333333]
 [0.00138696 0.13869626 0.02773925 0.83217753]
 [0.00397022 0.00099256 0.99255583 0.00248139]]

2.4 二值化

特征二值化是将数值特征用阈值过滤得到布尔值的过程。即,给定阈值,将特征转换为 0/1,一般用于图像中。

import matplotlib.pyplot as plt
raw_image=np.random.uniform(low=0,high=255,size=(28,28))
plt.imshow(raw_image,cmap="gray")

2.数据及其预处理

bin=sp.Binarizer(threshold=100)
plt.imshow(bin.fit_transform(raw_image),cmap="gray")

2.数据及其预处理

2.5 标签编码和独热编码

真实世界的数据集通常都含有非数值型的变量,例如人的性别,在分类任务中,标签通常也是非数值型的变量。

许多机器学习库要求类别是整型数值。虽然sklearn中大部分学习器都能自动将类别转为整型,但还是建议手动将类别进行转换。对类别进行编码。

label=np.array(
    ["男","女","女","男"]
)
le=sp.LabelEncoder()
label_encoder=le.fit_transform(label)
label_encoder
array([1, 0, 0, 1])
#也可以将新的标签编码安原来的规则转换为原始文本
le.inverse_transform([0,1,1,0,1])
array(['&#x5973;', '&#x7537;', '&#x7537;', '&#x5973;', '&#x7537;'], dtype='<u1') < code></u1')>

假设一个四分类分类任务,其标签分别为1,2,3,4,现在将其每个标签转换为概率值的形式。

ohe=sp.OneHotEncoder()
ohe.fit_transform(label_encoder.reshape(-1,1)).toarray()
array([[0., 1.],
       [1., 0.],
       [1., 0.],
       [0., 1.]])

3 sklearn 中的数据集

SKLearn里面有很多自带数据集供用户使用, sklearn.datasets专门用来获取数据集的模块。

根据数据集的形式,获取方式分为以下几种:

  • 自带的小数据集(packaged dataset): sklearn.datasets.load_*
  • 可在线下载的数据集(Downloaded Dataset): sklearn.datasets.fetch_*
  • 计算机生成的数据集(Generated Dataset): sklearn.datasets.make_*
  • svmlight/libsvm格式的数据集:sklearn.datasets.load_svmlight_file(...)
  • 从买了data.org在线下载获取的数据集:sklearn.datasets.fetch_mldata(...)
sklearn.datasets.load_*
  • *代表数据集的名称,可以通过 Tab键列出可支持的数据集
  • 数据集明细

数据集 介绍 load_wine 葡萄酒数据集 load_iris 鸢尾花数据集 load_boston 波士顿房屋数据集 load_breast_cancer 乳腺癌数据集 load_diabetes 糖尿病数据集 load_linnerud 体能训练数据集 load_digits 手写体数据集

下面以load_iris()为例:
load_iris():

  • 参数:
  • as_frame: bool,default=false,决定返回的数据类型是 pandas.DataframeSeries还是 numpy.ndarray(默认)
  • return_X_y: bool,default=false,默认返回的是 sklearn.utils.Bunch对象,它是对字典对象的继承,通过 .keys()方法可以查看有那些键,通过对应的键查看关键信息。如果不需要这些信息,可以设为 true,以元组的形式返回数据和标签。
from sklearn import datasets

*#导入数据集*

iris=datasets.load_iris()

*#可以把数据集看作一个字典,查看数据集中的键*

iris.keys()

dict_keys(['data', 'target', 'frame', 'target_names', 'DESCR', 'feature_names', 'filename', 'data_module'])

属性 介绍 data 数据,一行一样本,一列一特征,根据 as_frame决定什么类型 target 数据标签,根据 as_frame决定什么类型 frame 当as_frame为True是才返回内容 target_names 标签类别名 DESCR 对数据集的描述 feature_names 每个特征对应的名称 filename 数据集所在的文件名 data_module 数据集所在的模块

4.划分训练集和测试集

sklearn.model_selection中提供的 train_test_split()方法来切分训练集和测试集

  • 参数:
  • X:数据
  • y:标签
  • test_size:float or int, default=None,可以设置0到1之间的数,做为测试集的比例,也可以是整数,作为测试集的样本数,若果设置为default。则为0.25。
  • train_size:训练集样本数的设置,同上,一般只设置 test_size即可,不需要设置概参数
  • random_state:int, RandomState instance or None, default=None,随机种子
  • shufflebool, default=True,是否打乱

  • 具体使用:
    *

  from sklearn.model_selection import train_test_split
  X=iris.data
  y=iris.target
  X_train, X_test, y_train, y_test =train_test_split(X, y, random_state=2022,test_size=0.2, shuffle=True)

Original: https://www.cnblogs.com/bestwangyulu/p/16390641.html
Author: Wang-YL
Title: 2.数据及其预处理



相关阅读

Title: kaldi安装

kaldi安装教程

下载源文件

官网地址:http://kaldi-asr.org/doc/install.html#install_install

  1. 安装Git ,sudo apt-get install git;
  2. 换源 加上清华,阿里源
  3. 升级 sudo apt-get update upgrade
  4. 下载安装包git clone https://github.com/kaldi-asr/kaldi.git kaldi --origin upstream;
  5. 检查依赖库cd kaldi/tools;
    extras/check_dependencies.sh;
    提示:最下面会提示需要安装那些
  sudo apt-get install  automake

  sudo apt-get install   autoconf

  sudo apt-get install  g++

  sudo apt-get install   sox

  *&#x659C;&#x4F53;&#x6837;&#x5F0F;*

  sudo apt-get install  subversion

  sudo apt-get   apt-get
  sudo apt-get upgrade

  sudo apt-get install  zlib

安装MKL: extras/install_mkl.sh
6. 编译tools
(1)sudo make cub
可能会报错:检查下cub-1.8.0/大小,如果与实际不符,可以删除
sudo rm -rf cub-1.8.0/
sudo make cub
(2)make openfst

报错1:

2.数据及其预处理
重新下载压缩包即可。拷贝到对应目录
下载地址:http://www.openfst.org/twiki/bin/view/FST/FstDownload

; 报错2:内存不足

2.数据及其预处理
解决办法:创建分区

sudo dd if=/dev/zero of=/swapfile bs=1M count=1024    # 1 * 1024 = 1024 &#x521B;&#x5EFA; 1 g &#x7684;&#x5185;&#x5B58;&#x5206;&#x533A;
sudo mkswap /swapfile
sudo swapon /swapfile

free -m #可以查看内存使用

创建完交换分区之后就可以继续编译

创建分区是会报错:dd: failed to open '/swapfile': Text file busy
需要运行 sudo swapoff -a 即可解决。然后继续创建交换分区即可

继续编译make

报错3 缺少sox subversion

sudo apt-get  update
sudo apt-get  upgrade
sudo apt-get install sox subversion
  1. 编译src
    cd kaldi/src
    ./configure --shared
    make depend -j
    make -j
&#x67E5;&#x770B;&#x6700;&#x5927;&#x7EBF;&#x7A0B;&#x6570;&#xFF1A;nproc

报错1:各种CUDAerror

重新安装依赖库参考:https://blog.csdn.net/ctwy291314/article/details/81115575
重新编译tools
如果报错,需要make clean

报错2:Configuring MKL library directory: ***configure failed: Could not find the MKL library directoryPlease use the switch --mkl-root and/or --mkl-libdir if you have MKL installed, or try another math library, e.g. --mathlib=OPENBLAS (Kaldi may be slower).

./configure --mathlib=ATLAS

make 报错:Makefile:147: recipe for target 'matrix' failed

build&#x7684;&#x6587;&#x4EF6;&#x5DF2;&#x7ECF;&#x751F;&#x6210;&#x4E86;&#xFF0C;&#x6240;&#x4EE5;&#x6267;&#x884C;make clean &#x6E05;&#x9664;&#x4E0A;&#x4E00;&#x6B21;&#x751F;&#x6210;&#x7684;&#x53EF;&#x6267;&#x884C;&#x6587;&#x4EF6;&#xFF0C;&#x518D;&#x6B21;&#x6267;&#x884C;make&#x547D;&#x4EE4;&#xFF0C;ok&#x641E;&#x5B9A;&#x4E86;
make clean
make depend -j
  1. 检查是否按照成功
cd kaldi/egs/yesnoSS
./run

.

Original: https://blog.csdn.net/shengwei_1995/article/details/117248844
Author: shengwei_1995
Title: kaldi安装