【机器学习】特征数据预处理-标准化和归一化
2020-03-08 15:14
1246 查看
加载数据
import pandas as pd import numpy as np df = pd.read_csv( '../data/wine_data.csv', #葡萄酒数据集 header=None, #用哪行当做列名,我们自己来指定 usecols=[0,1,2] #返回一个子集,我们拿部分特征举例就可以了 ) df.columns=['Class label', 'Alcohol', 'Malic acid'] df.head()
在数据中,Alcohol和Malic acid 衡量的标准应该是不同的,特征之间数值差异较大
标准化和归一化
from sklearn.preprocessing import StandardScaler,MinMaxScaler std_scale = StandardScaler().fit(df[['Alcohol', 'Malic acid']]) df_std = std_scale.transform(df[['Alcohol', 'Malic acid']]) minmax_scale = MinMaxScaler().fit(df[['Alcohol', 'Malic acid']]) df_minmax = minmax_scale.transform(df[['Alcohol', 'Malic acid']]) print('Mean after standardization:\nAlcohol={:.2f}, Malic acid={:.2f}' .format(df_std[:,0].mean(), df_std[:,1].mean())) print('\nStandard deviation after standardization:\nAlcohol={:.2f}, Malic acid={:.2f}' .format(df_std[:,0].std(), df_std[:,1].std())) Mean after standardization: Alcohol=-0.00, Malic acid=-0.00 Standard deviation after standardization: Alcohol=1.00, Malic acid=1.00 print('Min-value after min-max scaling:\nAlcohol={:.2f}, Malic acid={:.2f}' .format(df_minmax[:,0].min(), df_minmax[:,1].min())) print('\nMax-value after min-max scaling:\nAlcohol={:.2f}, Malic acid={:.2f}' .format(df_minmax[:,0].max(), df_minmax[:,1].max())) Min-value after min-max scaling: Alcohol=0.00, Malic acid=0.00 Max-value after min-max scaling: Alcohol=1.00, Malic acid=1.00
%matplotlib inline from matplotlib import pyplot as plt def plot(): plt.figure(figsize=(8,6)) plt.scatter(df['Alcohol'], df['Malic acid'], color='green', label='input scale', alpha=0.5) plt.scatter(df_std[:,0], df_std[:,1], color='red', label='Standardized [$N (\mu=0, \; \sigma=1)$]', alpha=0.3) plt.scatter(df_minmax[:,0], df_minmax[:,1], color='blue', label='min-max scaled [min=0, max=1]', alpha=0.3) plt.title('Alcohol and Malic Acid content of the wine dataset') plt.xlabel('Alcohol') plt.ylabel('Malic Acid') plt.legend(loc='upper left') plt.grid() plt.tight_layout() plot() plt.show()
我们将原始的和变换后都放到了同一个图上,再看看数据是否被打乱了
fig, ax = plt.subplots(3, figsize=(6,14)) for a,d,l in zip(range(len(ax)), (df[['Alcohol', 'Malic acid']].values, df_std, df_minmax), ('Input scale', 'Standardized [$N (\mu=0, \; \sigma=1)$]', 'min-max scaled [min=0, max=1]') ): for i,c in zip(range(1,4), ('red', 'blue', 'green')): ax[a].scatter(d[df['Class label'].values == i, 0], d[df['Class label'].values == i, 1], alpha=0.5, color=c, label='Class %s' %i ) ax[a].set_title(l) ax[a].set_xlabel('Alcohol') ax[a].set_ylabel('Malic Acid') ax[a].legend(loc='upper left') ax[a].grid() plt.tight_layout() plt.show()
标准化处理对PCA主成分分析的影响
from sklearn.model_selection import train_test_split X_wine = df.values[:,1:] y_wine = df.values[:,0] X_train, X_test, y_train, y_test = train_test_split(X_wine, y_wine, test_size=0.30, random_state=12345) from sklearn import preprocessing std_scale = preprocessing.StandardScaler().fit(X_train) X_train_std = std_scale.transform(X_train) X_test_std = std_scale.transform(X_test) from sklearn.decomposition import PCA # on non-standardized data pca = PCA(n_components=2).fit(X_train) X_train = pca.transform(X_train) X_test = pca.transform(X_test) # om standardized data pca_std = PCA(n_components=2).fit(X_train_std) X_train_std = pca_std.transform(X_train_std) X_test_std = pca_std.transform(X_test_std)
接下来看看效果
%matplotlib inline from matplotlib import pyplot as plt fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(10,4)) for l,c,m in zip(range(1,4), ('blue', 'red', 'green'), ('^', 's', 'o')): ax1.scatter(X_train[y_train==l, 0], X_train[y_train==l, 1], color=c, label='class %s' %l, alpha=0.5, marker=m ) for l,c,m in zip(range(1,4), ('blue', 'red', 'green'), ('^', 's', 'o')): ax2.scatter(X_train_std[y_train==l, 0], X_train_std[y_train==l, 1], color=c, label='class %s' %l, alpha=0.5, marker=m ) ax1.set_title('Transformed NON-standardized training dataset after PCA') ax2.set_title('Transformed standardized training dataset after PCA') for ax in (ax1, ax2): ax.set_xlabel('1st principal component') ax.set_ylabel('2nd principal component') ax.legend(loc='upper right') ax.grid() plt.tight_layout() plt.show()
可以清晰的看到经过标准化的数据可分性更强
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 机器学习:数据特征预处理(归一化以及标准化对比)
- python机器学习库sklearn——数据归一化、标准化、特征选择、逻辑回归、贝叶斯分类器、KNN模型、支持向量机、参数优化
- spark 数据预处理 特征标准化 归一化模块
- 【机器学习】【数据预处理】数据的规范化,归一化,标准化,正则化
- 标准化、规范化、二值化等多种机器学习数据预处理方法
- 关于使用sklearn进行数据预处理 —— 归一化/标准化/正则化
- 机器学习——特征标准化、归一化、缩放、二值化
- 数据预处理中的归一化和标准化
- 关于使用sklearn进行数据预处理 —— 归一化/标准化/正则化
- sklearn数据预处理之标准化和归一化 学习笔记
- 【转】关于使用sklearn进行数据预处理 —— 归一化/标准化/正则化
- [Scikit-Learn] - 数据预处理 - 归一化/标准化/正则化
- 数据预处理 - 归一化/标准化/正则化
- 机器学习:数据特征预处理(缺失值处理)
- 机器学习—数据预处理—特征缩放
- 数据预处理之特征标准化
- [Scikit-Learn] - 数据预处理 - 归一化/标准化/正则化
- 关于使用sklearn进行数据预处理 —— 归一化/标准化/正则化
- 研究|数据预处理|归一化 (标准化)
- 机器学习中关于数据的归一化和标准化