前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >机器学习篇(二)

机器学习篇(二)

作者头像
不断折腾
发布2019-09-23 11:15:15
6590
发布2019-09-23 11:15:15
举报
特征预处理:

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

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

类别型数据: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:岭回归

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-01-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python入门到放弃 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档