文章目录

  • 数据的特征处理
  • 转换结果
  • 数值型数据:
  • 类别型数据:
  • 时间类型:
  • sklearn特征处理API
  • 归一化
  • sklearn归一化API
  • MinMaxScaler语法
  • 归一化步骤
  • 归一化案例:约会对象数据
  • 归一化总结
  • 标准化
  • 结合归一化来谈标准化
  • sklearn特征化API
  • StandardScaler语法
  • 标准化步骤
  • 标准化总结
  • 如何处理数据中的缺失值?
  • Imputer语法
  • Imputer流程
  • 关于np.nan(np.NaN)
  • 特征选择
  • 特征选择原因
  • 特征选择是什么
  • sklearn特征选择API
  • VarianceThreshold语法
  • VarianceThreshold流程
  • 其他特征选择方法
  • sklearn降维API
  • PCA(主成分分析)
  • 高维度数据容易出现的问题
  • PCA语法
  • 你凭什么相信,保留下来的特征就代表了削减之前的主要特征?
  • PCA流程
  • 探究:用户对物品类别的喜好细分降维
  • 其它降维方法
  • 特征选择与降维的比较?
  • 机器学习开启篇
  • 机器学习算法分类
  • 监督学习
  • 无监督学习
  • 分类问题
  • 回归问题


数据的特征处理

通过特定的统计方法(数学方法)将数据转换成算法要求的数据
1、特征处理的方法

2、sklearn特征处理API

转换结果

第一组将数据使用归一化处理的结果

第二组则是指定了其他数据范围后的归一化结果

多特征数据分析 特征数据处理_python

数值型数据:

标准缩放:
1、归一化
2、标准化
3、缺失值

类别型数据:

one-hot编码

时间类型:

时间的切分

sklearn特征处理API

sklearn. preprocessing

归一化

特点:通过对原始数据进行变换把数据映射到(默认为[0,1])之间

多特征数据分析 特征数据处理_python_02


注:作用于每一列,max为一列的最大值,min为一列的最小值,那么X’’

为最终结果,mx,mi分别为指定区间值默认mx为1,mi为0

归一化公式计算过程

多特征数据分析 特征数据处理_python_03

sklearn归一化API

sklearn归一化API: sklearn.preprocessing.MinMaxScaler

MinMaxScaler语法

MinMaxScalar(feature_range=(0,1)…)
每个特征缩放到给定范围(默认[0,1])

MinMaxScalar.fit_transform(X)
X:numpy array格式的数据[n_samples,n_features]
返回值:转换后的形状相同的array

归一化步骤

1、实例化MinMaxScalar

2、通过fit_transform转换

from sklearn.preprocessing import MinMaxScaler
def myuniformization():
    mm=MinMaxScaler(feature_range=(10,11))
    myArray=[[90,2,10,40],[60,4,15,45],[75,3,13,46]]
    mm_fit_transform = mm.fit_transform(myArray)
    print(mm_fit_transform)
    return None
if __name__=="__main__":
    myuniformization()

多特征数据分析 特征数据处理_python_04


将数据压缩在某个范围.

计算时按列结算[90,60,75],书写时按行书写[[90,2,10,40],[60,4,15,45],[75,3,13,46]]

归一化案例:约会对象数据

相亲约会对象数据,这个样本时男士的数据,三个特征,玩游戏所消耗时间的
百分比、每年获得的飞行常客里程数、每周消费的冰淇淋公升数。然后有一个
所属类别,被女士评价的三个类别,不喜欢didnt、魅力一般small、极具魅力large
也许也就是说飞行里程数对于结算结果或者说相亲结果影响较大,但是统计的
人觉得这三个特征同等重要。
消耗时间比
里程数
公升数
评价
14488 7.153469 1.673904 smallDoses
26052 1.441871 0.805124 didntLike
75136 13.147394 0.428964 didntLike
38344 1.669788 0.134296 didntLike
72993 10.141740 1.032955 didntLike
35948 6.830792 1.213192 largeDoses
如果这里的数据不统一缩放到某个范围,那么公里数特征将会掩盖其他特征
比如使用K近邻算法求距离相近的点,
(1448-26052)2+(7.153469-1.441871)2+(1.673904-0.805124)^2
那么毫无疑问是不合适的
如果数据中异常点较多,会有什么影响?
归一化依赖最大值,最小值,而统计不可能不出现错误,因此将会受到极大地干扰
因此很少用

归一化总结

注意在特定场景下最大值最小值是变化的,另外,最大值与最小值非常容易受异常点影响,所以这种方法鲁棒性较差,只适合传统精确小数据场景。

标准化

平均值对于个别异常点不敏感,平均值代表了大部分数据聚集的区域,可信度高

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

当方差为0,意味着数据相同,即最大最小值平均值相同,数据集中到一点

当方差很大,意味着数据离散度很高

多特征数据分析 特征数据处理_多特征数据分析_05

结合归一化来谈标准化

对于归一化来说:如果出现异常点,影响了最大值和最小值,那么结果显然
会发生改变

对于标准化来说:如果出现异常点,由于具有一定数据量,少量的异常点对
于平均值的影响并不大,从而方差改变较小。

sklearn特征化API

sklearn特征化API: scikit-learn.preprocessing.StandardScaler

StandardScaler语法

StandardScaler(…)
处理之后每列来说所有数据都聚集在均值0附近方差为1

StandardScaler.fit_transform(X,y)
X:numpy array格式的数据[n_samples,n_features]
返回值:转换后的形状相同的array

StandardScaler.mean_
原始数据中每列特征的平均值

StandardScaler.std_
原始数据每列特征的方差

标准化步骤

1、实例化StandardScaler

2、通过fit_transform转换

from sklearn.preprocessing import StandardScaler
def myNormalization():
    mylist=[[ 1., -1., 3.],[ 2., 4., 2.],[ 4., 6., -1.]]
    standard_scaler = StandardScaler()
    data=standard_scaler.fit_transform(mylist)
    print(data)
if __name__=="__main__":
    myNormalization()

多特征数据分析 特征数据处理_机器学习_06

标准化总结

在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景。

如何处理数据中的缺失值?

删除 如果每列或者行数据缺失值达到一定的比例,建议放弃整行或者整列
插补 可以通过缺失值每行或者每列的平均值、中位数来填充
sklearn缺失值API: sklearn.preprocessing.Imputer

Imputer语法

Imputer(missing_values=‘NaN’, strategy=‘mean’, axis=0)
axis代表弥补的是行还是列,0是列,1是行
strategy代表弥补的数据是那种类型,这里是平均值
missing代表数据占位符,一般为NAN
完成缺失值插补

Imputer.fit_transform(X,y)
X:numpy array格式的数据[n_samples,n_features]
返回值:转换后的形状相同的array

Imputer流程

1、初始化Imputer,指定”缺失值”,指定填补策略,指定行或列
注:缺失值也可以是别的指定要替换的值
2、调用fit_transform

关于np.nan(np.NaN)

1、 numpy的数组中可以使用np.nan/np.NaN来代替缺失值,属于float类型
2、如果是文件中的一些缺失值,可以替换成nan,通过np.array转化成float
型的数组即可

from sklearn.preprocessing import Imputer
import numpy as np
def myImputer():
    mylist=[[1, 2], [np.nan, 3], [7, 6]]
    print(mylist)
    imputer = Imputer(missing_values="NaN",strategy="mean",axis=0)
    data=imputer.fit_transform([[1, 2], [np.nan, 3], [7, 6]])
    print(data)
if __name__=="__main__":
    myImputer()

多特征数据分析 特征数据处理_sklearn_07


这里使用了中值填充

特征选择

1、特征选择是什么
2、sklearn特征选择API
3、其它特征选择方法

特征选择原因

多特征数据分析 特征数据处理_机器学习_08


特征?

1、羽毛颜色

2、眼睛宽度

3、是否有爪子

4、爪子长度

冗余:部分特征的相关度高,容易消耗计算性能
噪声:部分特征对预测结果有负影响

特征选择是什么

特征选择就是单纯地从提取到的所有特征中选择部分特征作为训练集特征,
特征在选择前和选择后可以改变值、也不改变值,但是选择后的特征维数肯
定比选择前小,毕竟我们只选择了其中的一部分特征。

主要方法(三大武器):
Filter(过滤式):VarianceThreshold
Embedded(嵌入式):正则化、决策树
Wrapper(包裹式)

sklearn特征选择API

sklearn.feature_selection.VarianceThreshold

VarianceThreshold语法

VarianceThreshold(threshold = 0.0)
方差过滤方法,方差为0意味着数据相同
删除所有低方差特征
Variance.fit_transform(X,y)
X:numpy array格式的数据[n_samples,n_features]
返回值:训练集差异低于threshold的特征将被删除。
默认值是保留所有非零方差特征,即删除所有样本中具有相同值的特征。

VarianceThreshold流程

1、初始化VarianceThreshold,指定阀值方差
2、调用fit_transform

其他特征选择方法

神经网络

sklearn降维API

sklearn. decomposition

PCA(主成分分析)

如何最好的对一个立体的物体二维表示

多特征数据分析 特征数据处理_机器学习_09


PCA是什么

本质:PCA是一种分析、简化数据集的技术

目的:是数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量信息。

作用:可以削减回归分析或者聚类分析中特征的数量

高维度数据容易出现的问题

特征之间通常是线性相关的
数据:
(-1,-2)
(-1, 0)
( 0, 0)
( 2, 1)
( 0, 1)

要求:将这个二维的数据简化成一维?

多特征数据分析 特征数据处理_机器学习_10

多特征数据分析 特征数据处理_机器学习_11


将二维坐标简化为了一维的5个特征点

多特征数据分析 特征数据处理_多特征数据分析_12


降维

PCA语法

PCA(n_components=None)
有整数和小数两种数据类型
小数代表保留的百分比特征,一般0.9~0.95之间,代表保留90%以上的特征
整数代表只保留N种特征,一般特征数未知,不常用
将数据分解为较低维数空间

PCA.fit_transform(X)
X:numpy array格式的数据[n_samples,n_features]
返回值:转换后指定维度的array

你凭什么相信,保留下来的特征就代表了削减之前的主要特征?

PCA流程

1、初始化PCA,指定减少后的维度
2、调用fit_transform

探究:用户对物品类别的喜好细分降维

数据:
products.csv 商品信息
order_products__prior.csv 订单与商品信息
orders.csv 用户的订单信息
aisles.csv 商品所属具体物品类别

https://www.kaggle.com/c/instacart-market-basket-analysis/data 600M用户购物数据,根据用户购买喜好为用户分类
读取四个csv文件,
目标是得到一张表
用户 商品类行
xx yy购买数
然后就可以通过用户购买商品信息,看出那些用户属于一类-
如何聚合表?
通过表之间相同的id聚合

import pandas as pd
from sklearn.decomposition import PCA
file1=r"C:\Users\Administrator.DESKTOP-KMH7HN6\Downloads\myPython\data\instacart\order_products__prior.csv"
file2=r"C:\Users\Administrator.DESKTOP-KMH7HN6\Downloads\myPython\data\instacart\products.csv"
file3=r"C:\Users\Administrator.DESKTOP-KMH7HN6\Downloads\myPython\data\instacart\orders.csv"
file4=r"C:\Users\Administrator.DESKTOP-KMH7HN6\Downloads\myPython\data\instacart\aisles.csv"
prior=pd.read_csv(file1)
products=pd.read_csv(file2)
orders=pd.read_csv(file3)
aisles=pd.read_csv(file4)
myMg=pd.merge(prior,products,on=['product_id','product_id'])
myMg=pd.merge(myMg,orders,on=['order_id','order_id'])
myMg=pd.merge(myMg,aisles,on=['aisle_id','aisle_id'])
print(myMg.head(10))

多特征数据分析 特征数据处理_数据_13


然而结果与预想的有差异,目标是得到这样一张表

用户 商品类行

xx yy购买数

现在只是将所有表按照id合并在了一起而已

因此还需要交叉表,即将得到的表再处理一次

cross=pd.crosstab(myMg['user_id'],myMg['aisle'])
print("得到新的最终表,交叉表")
print(cross.head(10))

其它降维方法

线性判别分析LDA

特征选择与降维的比较?

数据处理好后就可以让机器开始学习了

机器学习开启篇

1、机器学习开发流程

2、机器学习模型是什么

3、机器学习算法分类

需明确几点问题:

多特征数据分析 特征数据处理_机器学习_14


(1)算法是核心,数据和计算是基础

机器学习开发流程

机器学习算法分类

监督学习
分类 k-近邻算法、贝叶斯分类、决策树与
随机森林、逻辑回归、神经网络
回归 线性回归、岭回归
标注 隐马尔可夫模型 (不做要求)
无监督学习
聚类 k-means

监督学习

监督学习(英语:Supervised learning),可以由输入数据中学
到或建立一个模型,并依此模式推测新的结果。输入数据是由
输入特征值和目标值所组成。函数的输出可以是一个连续的值
(称为回归),或是输出是有限个离散值(称作分类)。
有特征有标签,有标准答案

无监督学习

无监督学习(英语:Supervised learning),可以由输入数据中
学到或建立一个模型,并依此模式推测新的结果。输入数据是
由输入特征值所组成。
无标签,有特征,无标准答案

分类问题

概念:分类是监督学习的一个核心问题,在监督学习中,当输出变量取有限个离散值时,预测问题变成为分类问题。最基础的便是二分类问题,即判断是非,从两个类别中选择一个作为预测结果;

回归问题

概念:回归是监督学习的另一个重要问题。回归用于预测输入变量和输出变量之间的关系,输出是连续型的值。