表2-3给出了提取的四组数据,如果想要计算样本3和样本4之间的距离,可以使用下面的方法:
容易发现,上面方程中数字差值最大的属性对计算结果的影响最大,但是,在实际应用中,三个特征是等权重的,飞行常客里程数并不应该如此严重地影响到计算结果。
在处理不同取值范围的特征值时,通常采用归一化方法, 如将取值范围处理为0到1或者-1到1之间。
下面的公式可以将任意取值范围的特征值转化为0到1区间内的值:
其中,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)
运行结果为:
!!!注:也可以将上述代码复制在一个执行程序中运行程序,同样能够得到一样的结果