[机器学习]-[数据预处理]-中心化 缩放 KNN(二)

上次我们使用精度评估得到的成绩是 61%,成绩并不理想,再使 recall 和 f1 看下成绩如何?

首先我们先了解一下 召回率和 f1。

真实结果

预测结果

预测结果

正例

反例

正例

TP 真正例

FN 假反例

反例

FP 假正例

TN 真反例

召回率:TP/(TP+FN)

f1:2TP/(2TP+FN+FP)

我们使用scikit-learn的分类报告来查看各种其他指标:

现在我们来介绍一下缩放和中心化,他们是预处理数值数据最基本的方法,接下来,看看它们是否对模型有影响,以及怎样的影响。

预处理的机制:缩放和中心化

在运行模型(如回归(预测连续变量)或分类(预测离散变量))之前,我们还是需要对数据进行一些预处理。对于数值变量,规范化标准化数据是很常见的。这些术语是什么意思?

规范化手段就是缩放数据集,使其数据取值的范围压缩到0,1。我们的做法就是转换每个数据点:规范化结果=(数据点-数据最小值)/(数据最大值-数据最小值)。

标准化则略有不同, 它的最终结果就是将数据集中在0左右,并按照标准偏差进行缩放:标准化结果=(数据点-均值)/标准差。

有一点需要强调,这些转换只是改变了数据的范围而不是分布。当然,你也可以根据自己的需要使用其他的转换方式(如对数转换换或正太转换)来达到数据的高斯分布形式(如钟形曲线)。

现在我们思考几个重要的问题:

  • 为什么我们要调整数据?
  • 什么时机处理更合适?
  • 分类问题和回归问题哪个更重要?

下面我们就具体看下缩放对 KNN 的影响。

预处理:缩放的预处理

下面是我们的处理步骤

  1. 缩放数据
  2. 使用 KNN
  3. 查看模型结果

使用scikit-learn的缩放函数,它会将传给它的数组中所有的特征(列)标准化。

通过上面的处理之后提高了0.1,这就说明预处理的很成功,同时也说明预处理很重要!!!如上所述,在缩放之前,存在许多具有不同数量级范围的预测变量,这意味着它们中的某一个或几个可能在,如 KNN 算法处理中占主导地位。缩放数据的一般是基于以下两个原因:

  1. 预测变量可能有明显不同的范围,并且在某些情况下(例如使用 KNN),需要削弱某些特征对算法的主导;
  2. 功能与单位无关,即不依赖于所涉及的规模:例如,我使用米来表示测量的特征,你使用厘米来表示相同的特征。如果我们都缩放各自的数据,那么,这个特征对我们每个人都是一样的。

到目前位置,我们已经了解了缩放和中心化在整个机器学习中的基本位置,我们这样做主要的目的就是提高机器学习的学习能力。我希望后续,我能和大家分享一些其他类型的预处理。在进入这个之前,在下一篇文章中,我将探讨缩放在回归分类方法中的作用。

最后,有兴趣的同学可以自行设置 KNN 的 n_neighbors 变量,然后观察一下 n_neighbors 对机器学习的影响。

代码:

import pandas as pd
%matplotlib inline
import matplotlib.pyplot as plt
#from sklearn.cross_validation import train_test_split
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
from sklearn import neighbors, linear_model

plt.style.use('ggplot')
df = pd.read_csv('http://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv ' , sep = ';')

# 删除目标结果
X = df.drop('quality' , 1).values
y1 = df['quality'].values
pd.DataFrame.hist(df, figsize = [15,15]);

df.describe()

# 使用 5 作为边界进行分类
y = y1 <= 5

# 原始目标结果和二分类之后的目标结果
plt.figure(figsize=(20,5));
plt.subplot(1, 2, 1 );
plt.hist(y1);
plt.xlabel('original target value')
plt.ylabel('count')
plt.subplot(1, 2, 2);
plt.hist(y)
plt.xlabel('two-category target value')
plt.show()

# 切分测试数据与训练数据
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

knn = neighbors.KNeighborsClassifier(n_neighbors = 5)
knn_model_1 = knn.fit(X_train, y_train)
print('k-NN accuracy: {}'.format(knn_model_1.score(X_test, y_test)))

# 其他评估评分
y_true, y_pred = y_test, knn_model_1.predict(X_test)
print(classification_report(y_true, y_pred))

# 预处理数据
Xs = scale(X)

# 切分测试数据与训练数据
Xs_train, Xs_test, y_train, y_test = train_test_split(Xs, y, test_size=0.2, random_state=42)

# 可以通过设置 n_neighbors 来进行训练
knn = neighbors.KNeighborsClassifier(n_neighbors = 5)
knn_model_2 = knn.fit(Xs_train, y_train)
print('k-NN test: %f' % knn_model_2.score(Xs_test, y_test))
print('k-NN training: %f' % knn_model_2.score(Xs_train, y_train))
y_true, y_pred = y_test, knn_model_2.predict(Xs_test)
print(classification_report(y_true, y_pred))

知乎:数据预处理-中心化 缩放 KNN(二)

博客园:[机器学习]-[数据预处理]-中心化 缩放 KNN(二)

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

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

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器之心

综述论文:当前深度神经网络模型压缩和加速方法速览

36570
来自专栏机器之心

教程 | 算法太多挑花眼?教你如何选择正确的机器学习算法

机器学习既是一门科学,也是一种艺术。纵观各类机器学习算法,并没有一种普适的解决方案或方法。事实上,有几个因素会影响你对机器学习算法的选择。

10710
来自专栏华章科技

实景照片秒变新海诚风格漫画:清华大学提出CartoonGAN

CartoonGAN 的预训练模型,其中包括宫崎骏、细田守、今敏(动画电影《红辣椒》)和新海诚风格:

14320
来自专栏数据科学与人工智能

【机器学习】实例详解机器学习如何解决问题

前言 随着大数据时代的到来,机器学习成为解决问题的一种重要且关键的工具。不管是工业界还是学术界,机器学习都是一个炙手可热的方向,但是学术界和工业界对机器学习的...

27660
来自专栏AI派

5个原因告诉你:为什么在成为数据科学家之前,“逻辑回归”是第一个需要学习的

来源 | https://towardsdatascience.com/5-reasons-logistic-regression-should-be-the-...

9930
来自专栏机器之心

嘿嘿,想变成会跳舞的小哥哥或小姐姐吗?超简单!

作者:Caroline Chan、Shiry Ginosar、Tinghui Zhou、Alexei A. Efros

9910
来自专栏数据科学与人工智能

【机器学习】机器学习实践中的7种常见错误

本文作者是 Codecademy 的分析主管 Cheng-TaoChu,其专长是数据挖掘和机器学习,之前在 Google、LinkedIn和Square就职。 ...

28370
来自专栏机器之心

实景照片秒变新海诚风格漫画:清华大学提出CartoonGAN

CartoonGAN 的预训练模型,其中包括宫崎骏、细田守、今敏(动画电影《红辣椒》)和新海诚风格:http://cg.cs.tsinghua.edu.cn/p...

12900
来自专栏CDA数据分析师

算法太多挑花眼?教你如何选择正确的机器学习算法

机器学习既是一门科学,也是一种艺术。纵观各类机器学习算法,并没有一种普适的解决方案或方法。事实上,有几个因素会影响你对机器学习算法的选择。

13400
来自专栏CDA数据分析师

如何利用机器学习进行海量数据挖掘

互联网的海量数据不可能靠人工一个个处理,只能依靠计算机批量处理。最初的做法是人为设定好一些规则,由机器来执行。但特征一多规则就很难制定,即使定下了规则也没法根据...

24570

扫码关注云+社区

领取腾讯云代金券