前言:大多数模型都是直接给出公式,其实自己私下有推导,涉及好多自己不懂的数学知识,会一点点补充的
机器学习专栏:机器学习专栏
特征缩放
1、特征缩放作用
面对特征数量较多的时候,保证这些特征具有相近的尺度(无量纲化),可以使梯度下降法更快的收敛。这两张图代表数据是否均一化的最优解寻解过程(左边是未归一化的),
从这两张图可以看出,数据归一化后,最优解的寻优过程明显会变得平缓,更容易正确的收敛到最优解
2、特征缩放的四种方式
- Min-Max Normalization(min-max标准化)
x ∗ = x − m i n ( x ) m a x ( x ) − m i n ( x ) x^*=\frac{x-min(x)}{max(x)-min(x)} x∗=max(x)−min(x)x−min(x) - Mean normalization(mean归一化)
x ∗ = x − m e a n ( x ) m a x ( x ) − m i n ( x ) x^*=\frac{x-mean(x)}{max(x)-min(x)} x∗=max(x)−min(x)x−mean(x) - Standarddization(z-score标准化)
x ∗ = x − x ˉ σ x^*=\frac{x-\bar {x}}{\sigma} x∗=σx−xˉ - max标准化
x ∗ = x m a x ( x ) x^*=\frac{x}{max(x)} x∗=max(x)x
3、sklearn实现特征缩放
# -*- coding: utf-8 -*-
"""
Created on Fri Nov 15 16:31:37 2019
@author: 1
"""
import pandas as pd
from sklearn import preprocessing
#读取葡萄酒数据集
data = pd.read_csv("D:\workspace\python\machine learning\data\wine_data.csv",sep=',',header=None,skiprows=1)
x =data.iloc[:,1]
#获取数据的基本情况
print('获取数据的基本情况:',x.describe())
#我们不知道z的shape属性是多少,但是想让z变成只有一列,行数不知道多少,z.reshape(-1,1)
X_train=x.values.reshape(-1,1)
#min-max标准化
MinMax = preprocessing.MinMaxScaler()
X_MinMax = MinMax.fit_transform(X_train)
print('min-max标准化归一化后结果:',X_MinMax)
#z-score标准化
X_scaled = preprocessing.scale(X_train)
print("z-score标准化结果:",X_scaled)
#max标准化
X_max_scaler = preprocessing.MaxAbsScaler(X_train)
print("max标准化结果:",X_max_scaler)