《机器学习实战》第2章阅读笔记3 使用K近邻算法改进约会网站的配对效果—分步骤详细讲解3——准备数据:归一化数值(附详细代码及注释)

表2-3给出了提取的四组数据,如果想要计算样本3和样本4之间的距离,可以使用下面的方法:

                                                         \sqrt{(0-67)^{2}+(20000-32000)^{2}+(1.1-0.1)^{2}}

容易发现,上面方程中数字差值最大的属性对计算结果的影响最大,但是,在实际应用中,三个特征是等权重的,飞行常客里程数并不应该如此严重地影响到计算结果。


在处理不同取值范围的特征值时,通常采用归一化方法, 如将取值范围处理为0到1或者-1到1之间。

下面的公式可以将任意取值范围的特征值转化为0到1区间内的值:

                                                            newValue =(oldValue-min)/(max-min)

其中,min和max分别代表数据集中的最小特征值和最大特征值。


下边代码将数据进行归一化,用到两个模块:

(1)file2matrix.py模块,用来将文件数据转换为分类器格式

(2)auto_norm.py模块,将数据归一化

扫描二维码关注公众号,回复: 4536998 查看本文章

file2matrix.py

该模块具体参考以前博文《机器学习实战》第2章阅读笔记3 使用K近邻算法改进约会网站的配对效果—分步骤详细讲解1——数据准备:从文本文件中解析数据(附详细代码及注释)该博文有详细的说明及注释


auto_norm.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-
from numpy import *


def auto_norm(data_set):
    """归一化特征值"""
    # 从列中选取最小值和最大值,大小为1*3
    min_vals = data_set.min(0)
    max_vals = data_set.max(0)
    # 可能取值的范围
    ranges = max_vals - min_vals
    # 复制min_vals,max_vals,使得大小为1000*3
    m = data_set.shape[0]  # 求行数
    min_vals = tile(min_vals, (m, 1))
    ranges = tile(ranges, (m, 1))

    # 创建归一化矩阵,大小与data_set相同
    norm_data_set = zeros(shape(data_set))
    norm_data_set = data_set - min_vals
    norm_data_set = norm_data_set/ranges
    return norm_data_set, min_vals, ranges

主程序为:

from file2matrix import file2matrix  # 从file2trix模块中导入file2matrix函数
from auto_norm import auto_norm  # 从auto_norm模块中导入auto_norm函数


# 创建一个读取数据实例,并输出数据
dating_data_mat, dating_labels = file2matrix('datingTestSet2.txt')
print("原始特征值为")
print(dating_data_mat)
# 归一化数据
norm_dating_data_mat, min_vals, ranges = auto_norm(dating_data_mat)
print("归一化后特征值为")
print(norm_dating_data_mat)

运行结果为:

!!!注:也可以将上述代码复制在一个执行程序中运行程序,同样能够得到一样的结果

猜你喜欢

转载自blog.csdn.net/Sophia_11/article/details/85001810