机器学习实战-学习笔记(三)准备数据: 归一化数值

案例中有三个特征值:飞行里程数, 玩视频游戏的时间百分比以及每周消费冰淇淋的公升数, 但由于飞行里程数远大于其它两个特征值, 对计算结果产生严重的影响, 而我们认为这三个特征是同等重要的.
解决这个问题可以采用数值归一化的方法, 将取值范围处理为0到1或者-1到1之间. 我们用newValue = (oldValue - min)/(max - min) 这个公式将任意取值范围的特征值转化为0到1区间内的值.

在kNN.py中加入autoNorm()函数

def autoNorm(dataSet):
    # minima along the first axis
    minVals = dataSet.min(0)
    # maxima along the first axis
    maxVals = dataSet.max(0)
    ranges = maxVals - minVals
    normDataSet = zeros(shape(dataSet))
    m = dataSet.shape[0]
    normDataSet = dataSet - tile(minVals, (m,1))
    normDataSet = normDataSet/tile(ranges, (m,1))
    return normDataSet, ranges, minVals

执行代码

>>> import kNN
>>> datingDataMat, datingLabels = kNN.file2matrix('datingTestSet.txt')
>>> normMat, range, minVals = kNN.autoNorm(datingDataMat)
>>> normMat
array([[0.44832535, 0.39805139, 0.56233353],
       [0.15873259, 0.34195467, 0.98724416],
       [0.28542943, 0.06892523, 0.47449629],
       ...,
       [0.29115949, 0.50910294, 0.51079493],
       [0.52711097, 0.43665451, 0.4290048 ],
       [0.47940793, 0.3768091 , 0.78571804]])
 >>> range
array([9.1273000e+04, 2.0919349e+01, 1.6943610e+00])
>>> minVals
array([0.      , 0.      , 0.001156])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值