【机器学习】(十五)预处理和缩放:StandardScaler、RobustScaler、MinMaxScalar、Normalizer

预处理:对数据的一种简单的按特征的缩放和移动。

不同类型的预处理

【机器学习】(十五)预处理和缩放:StandardScaler、RobustScaler、MinMaxScalar、Normalizer_第1张图片
这是一个有两个特征(x/y)的二分类数据集,四种预处理方法:

  • StandardScaler:确保每个特征的平均值为0,方差为1。
  • RobustScaler:使用中位数和四分位数(四分之一),确保每个特征的统计属性都位于同一范围。
  • MinMaxScalar:移动数据,使所有特征都刚好位于0-1之间。
  • Normalizer:对每个数据点进行缩放,使得特征向量的欧式长度等于1。

应用数据变换

MinMaxScaler缩放

from sklearn.datasets import make_blobs
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
import matplotlib.pyplot as plt
import mglearn

# 构造数据集,50个样本,5个类别,方差为2,测试集比例为0.1
x, _ = make_blobs(n_samples=50, centers=5, random_state=4, cluster_std=2)
x_train, x_test = train_test_split(x, random_state=5, test_size=.1)

# 绘制未处理的训练集和数据集
fig, axes = plt.subplots(1, 2, figsize=(9, 4))
axes[0].scatter(x_train[:,0], x_train[:,1], c=mglearn.cm2(0), label="Training set", s=60)
axes[0].scatter(x_test[:,0], x_test[:,1], c=mglearn.cm2(1), label="Test set", s=60)
axes[0].legend(loc='upper left')
axes[0].set_title('Original Data')

# 使用MinMaxScaler缩放数据
scaler = MinMaxScaler()
scaler.fit(x_train)
x_train_scaled = scaler.transform(x_train)
x_test_scaled = scaler.transform(x_test)

axes[1].scatter(x_train_scaled[:,0], x_train_scaled[:,1], c=mglearn.cm2(0), label="Training set", s=60)
axes[1].scatter(x_test_scaled[:,0], x_test_scaled[:,1], c=mglearn.cm2(1), label="Test set", s=60)
axes[1].set_title('Scaled Data')

test_size参数表示切分的训练集和测试集的比例
transform方法使模型返回一种新的表示。但是缩放器(MinMaxScaler)总是对训练集和测试集应用完全相同的变换,即transform方法总是减去训练集的最小值然后除以训练集的范围。于是对测试集缩放后的数据可能不是0-1。
【机器学习】(十五)预处理和缩放:StandardScaler、RobustScaler、MinMaxScalar、Normalizer_第2张图片

在cancer数据集使用MinMaxScaler处理的SVC分类器

from sklearn.svm import SVC
from sklearn.datasets import load_breast_cancer

cancer = load_breast_cancer()
x_train, x_test, y_train, y_test = train_test_split(cancer.data, cancer.target, random_state=0)

svm = SVC(C=100)
svm.fit(x_train, y_train)
print(svm.score(x_test, y_test)) # 0.9440559440559441

# 使用0-1缩放进行预处理
scaler = MinMaxScaler()
scaler.fit(x_train)
x_train_scaled = scaler.transform(x_train)
x_test_scaled = scaler.transform(x_test)

svm.fit(x_train_scaled, y_train)
print(svm.score(x_test_scaled, y_test)) # 0.965034965034965

你可能感兴趣的:(ML&DL,机器学习)