博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
白手起家学习数据科学 ——处理数据之“尺度变换篇”(七)
阅读量:4057 次
发布时间:2019-05-25

本文共 1482 字,大约阅读时间需要 4 分钟。

尺度变化(Rescaling)

许多技术对数据尺度很敏感。例如,设想一下,你有包含数百数据科学家身高(height)、体重(weight)的数据集,你正在尝试对其进行聚类。

直观上,我们想要聚集区表示彼此靠近的点集,这个意思是我们需要点之间距离的概念。我们已经掌握了欧式距离(Euclidean distance)函数,所以一个自然的方法可以把(height, weight)对看成二维空间里的点集。考虑下面的列表:

这里写图片描述

如果我们用英尺(inches)测量身高,那么B的最近的邻居就是A:

a_to_b = distance([63, 150], [67, 160]) # 10.77a_to_c = distance([63, 150], [70, 171]) # 22.14b_to_c = distance([67, 160], [70, 171]) # 11.40

然而,如果我们用厘米(centimeters)测量身高,那么B的最近邻居就是C:

a_to_b = distance([160, 150], [170.2, 160]) # 14.28a_to_c = distance([160, 150], [177.8, 171]) # 27.53b_to_c = distance([170.2, 160], [177.8, 171]) # 13.37

很显然,如果改变单位能改变结果,这是有问题的。为了解决这个问题,我们有时候改变数据的尺度,以便每个维度的均值为0,标准差为1。这种方法能够有效消除单位的影响。

首先,我们需要计算每一维度的均值标准差

def scale(data_matrix):    """returns the means and standard deviations of each column"""    num_rows, num_cols = shape(data_matrix)    means = [mean(get_column(data_matrix,j))            for j in range(num_cols)]    stdevs = [standard_deviation(get_column(data_matrix,j))            for j in range(num_cols)]    return means, stdevs

使用它们创建新的数据矩阵:

def rescale(data_matrix):    """rescales the input data so that each column    has mean 0 and standard deviation 1    leaves alone columns with no deviation"""    means, stdevs = scale(data_matrix)    def rescaled(i, j):        if stdevs[j] > 0:            return (data_matrix[i][j] - means[j]) / stdevs[j]        else:            return data_matrix[i][j]    num_rows, num_cols = shape(data_matrix)    return make_matrix(num_rows, num_cols, rescaled)
你可能感兴趣的文章
VMware Workstation Pro虚拟机不可用解决方法
查看>>
最简单的使用redis自带程序实现c程序远程访问redis服务
查看>>
redis学习总结-- 内部数据 字符串 链表 字典 跳跃表
查看>>
iOS 对象序列化与反序列化
查看>>
iOS 序列化与反序列化(runtime) 01
查看>>
iOS AFN 3.0版本前后区别 01
查看>>
iOS ASI和AFN有什么区别
查看>>
iOS QQ侧滑菜单(高仿)
查看>>
iOS 扫一扫功能开发
查看>>
iOS app之间的跳转以及传参数
查看>>
iOS __block和__weak的区别
查看>>
Android(三)数据存储之XML解析技术
查看>>
Spring JTA应用之JOTM配置
查看>>
spring JdbcTemplate 的若干问题
查看>>
Servlet和JSP的线程安全问题
查看>>
GBK编码下jQuery Ajax中文乱码终极暴力解决方案
查看>>
Oracle 物化视图
查看>>
PHP那点小事--三元运算符
查看>>
解决国内NPM安装依赖速度慢问题
查看>>
Brackets安装及常用插件安装
查看>>