机器学习篇(二)

特征预处理:

目的:方便我们下一步的处理。

数值类数据:缩放:归一化,标准化,缺失值处理

类别型数据:one-hot编码

时间类型:时间的切分


数值型数据之归一化

什么是归一化?

为了数据处理的方便和提取,把数据映射成0-1之间的数,更加方便。

归一化的公式:x1 = (x-mix)/(max-min) x2 = x1*(mx-mi) + mi

# 作用于每一列,max为一列的最大值,min为一列的最小值,mx,mi为指定区间值默认mx为1,mi为0

# x2 为最终结果。使用默认值x1就为最终结果。

什么时候用到归一化?

当某些特征同等重要的时候,但是数值差别很大,会进行归一化处理。

目的:来使之不受某一个特征的影响过大。

缺点:对于异常点比如有个点更大更小,便宜过大,会影响较大。

归一化实例:

# 归一化处理

# 导入归一化模块MinMaxScaler

from sklearn.preprocessing import MinMaxScaler

def mm():

# 实例化

mm = MinMaxScaler()

data = mm.fit_transform([[123,222,2,54],[70,60,10,99],[65,40,30,23]])

print(data)

会输出:

[[1.        1.        0.        0.40789474]

[0.0862069  0.10989011 0.28571429 1.        ]

[0.        0.        1.        0.        ]]

如果想让他显示不在0-1之间,而是在2,5之间:

# 实例化修改成:

mm = MinMaxScaler(feature_range=(2,5))

# 根据数值的大小,对应生成某个区间对应值的大小。


数值型数据之标准化

由于归一化对异常值的处理不好,所以不常用

使用最广泛的就是标准化。标准化就是在归一化的基础上对异常值的处理较好。

特点:通过原始数据进行变换到均值为0,方差为1范围。

x = x-mean/标准差

# 作用于每一列,mean为平均值。标准差这里不好写,自己百度一下就好。

标准差实例:

# 导入标准差模块StandardScaler

from sklearn.preprocessing import MinMaxScaler,StandardScaler

# 标准差处理

def stand():

std = StandardScaler()

data = std.fit_transform([[123,222,2,54],[70,60,10,99],[65,40,30,23]])

print(data)

输出:

[[ 1.40992884  1.40709714 -1.01904933 -0.14956377]

[-0.60969896 -0.58083661 -0.33968311  1.29265832]

[-0.80022988 -0.82626053  1.35873244 -1.14309455]]

# 标准化常用于数据多且杂的情况下。


缺失值的处理

1、删除,整行或者整列的删除(数据来之不易,不建议)

2、填补,根据实际情况的不同,填充平均值,中位数等值(一般按照列来填充)

sklearn提供的填充模块:sklearn.preprocessing.Imputer

使用:imputer(missing_values="NaN",strategy="mean",axis=0)

missing_values:缺失值的位置

strategy:填充什么值,mean表示平均数

axis:更具0轴还是1轴填充值

实例:

# 导入模块

from sklearn.preprocessing import Imputer

import numpy as np

def Im():

im = imputer(missing_values="NaN",strategy="mean",axis=0)

data = im.fit_transform([[123,np.nan,2,54],[np.nan,60,10,99],[65,40,30,23]])

print(data)

输出:

[[123.  50.  2.  54.]

[ 94.  60.  10.  99.]

[ 65.  40.  30.  23.]]


数据的降维

降维:特征的数量(不是数组的维度)

比如有身高,体重,头发长度这三个特征,就是三维。

将三维变成二维就是降维处理。

为什么要降维?

有些不重要影响不大的数据我们可以选择不要。

降维的方式:

1、特征选择

2、主成分分析


特征选择:

如果特征过多,几千个特选不可能人为的选择。这里就要借助其他工具。

常用特征处理:

1、Fileter:过滤

# 对方差进行过滤,方差小的,说明数值相差不大,也就是特征大致相同,就选择过滤掉。

2、Embedded:嵌入式(正则化,决策树)后面讲

3、神经网络

特征选择实例:

def var():

# 数据

test = [[2,4,6],[3,4,8],[6,4,9]]

# threshold=0.0表示把一样的数据删除,默认也是删除方差为0的

v = VarianceThreshold(threshold=0.0)

data = v.fit_transform(test)

print(data)

# VarianceThreshold你可以自己修改,修改成1.0就删除方差小于1.0的数据。


主成分分析(PCA)

PCA:分析,简化数据集的技术

目的:对数据维度进行压缩,减少原数据的维度,损失的数据较少

应用场景:特征数量达到上百个就需要考虑一下了。

用低维度表示高纬度的东西但损失较少的数据,结合实际,最常见的就是画出的立体图。

公式:百度一下,有兴趣的也可以看一下推导式。

PCA实例:

# 导入模块

from sklearn.decomposition import PCA

def pca():

test = [[2,4,6],[3,4,8],[6,4,9]]

pca = PCA(n_components=0.99)

data = pca.fit_transform(test)

print(data)

输出:

[[-2.32318647 -0.39794495]

[-0.35170213  0.65716145]

[ 2.6748886  -0.25921649]]

# 变成了2个特征的。

# n_components参数可以是小数也可以是整数

# 小数表示要保存%之多少的数据

# 整数表示去掉多少数据


数据集的划分

拿到很多数据,不会将他全部用来训练模型。

把数据分为两部分:训练集和测试集

一般70%,30%,或75%,25%或80%,20%。

训练集就是帮助我们建立模型,而测试集就是评估模型。

sklearn给我们提供了划分数据的模块:sklearn.model_selection.train_test_split

同时sklearn也提供给了学习使用的数据:

skliearn.datasets模块

datasets.load_xxx():提供给我们小规模数据

datasets.fetch_xxx(data_home=None):大规模数据

# 这里xxx表示不同的数据集。

# data_home表示需要下载的路径

返回的数据都是datasets.base.Bunch类型(也就是字典格式)

属性:

data:获取特征数据数组,是一个多行多列的二维数组(类型为numpy.ndarray)

target:标签,一维数组(也就是目标值)

DESCR:数据描述

deature_names:特征名(有些数据集没有)

target_names:标签名

实例:

# 导入鸢尾花数据集(4个花的特征,3中类别,150个样本数据,每个类别数量50个)

from sklearn.datasets import load_iris

# 导入划分训练集和评估集模块

from sklearn.model_selection import train_test_split

def Iris():

# 获取到数据集

l = load_iris()

# 输出特征值

print(l.data)

# 输出目标值

print(l.target)

# 输出数据集详情(什么特征,什么类别等)

print(l.DESCR)

# 获取特征名

print(l.feature_names)

# 获取目标值名称

print(l.target_names)

# 划分数据集

# 返回数据的顺序为训练集的特征值,测试集的特征值,训练集的特征值,训练集的目标值,测试集的目标值

# 依次起名为:x_train,x_test,y_train,y_test(不能改变顺序)

# 第一个参数为数据,第二个参数为目标值,第三个为测试集大小。

x_train,x_test,y_train,y_test = train_test_split(l.data,l.target,test_size=0.25)

print("训练集数据和目标值:",x_train,y_train)

# 在sklearn还有其他数据,比如load_diabetes()是糖尿病数据集。

# 对于大数据集这里就不慌介绍了,下载速度比较慢。


转换器

回想特征工程的步骤.

1、实例化(转换器)

2、调用fit_transform()转化成数据集

其实在其中还有两个方法,fit()和transform(),很像把fit_transform拆分开了。

实际fit_transform() = fit()+ transform()

fit():输入数据,但是不做转化,但是他提前做了计算平均值等。

transform():进行数据的转化。

为什么拆开?

转换成数据集的时候是根据平均值,方差等等计算转化的。

但是如果我不想用这个数据集的平均值和方差来转化。想用其他的数据的平均值和方差来计算呢?

此时就需要拆开处理了。

比如:

标准化处理:

from sklearn.preprocessing import StandardScaler

std = StandardScaler()

data1 = std.fit([[111,222,333],[444,555,666]])

data2 = std.transform([[11,22,33],[44,55,66]])

此时也就是用来data1中的平均值和方差等来转化data2中的数据。


估计器

估计器就是一些算法的实现。

分类算法:

sklearn.neighbors:k-近邻算法

sklearn.naive_bayes:贝叶斯算法

sklearn.linear_model.LogisticRegression:逻辑回归

sklearn.tree:决策树和随机森林

回归算法:

sklearn.linear_model.LinearRegression:线性回归

sklearn.linear_model.Ridge:岭回归

你可能感兴趣的:(机器学习篇(二))