首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Spark的LinearRegressionWithSGD对特征缩放非常敏感

Spark的LinearRegressionWithSGD对特征缩放非常敏感
EN

Stack Overflow用户
提问于 2015-06-22 05:40:38
回答 3查看 4.4K关注 0票数 4

我有一个问题,与LinearRegressionWithSGD在火花的MLlib。我用他们的例子从这里安装https://spark.apache.org/docs/latest/mllib-linear-methods.html (使用Python )。

在他们的例子中,所有的特征几乎都是缩放的,平均值在0左右,标准偏差在1左右。现在,如果我用10倍的非标度,回归中断(给出nans或非常大的系数):

代码语言:javascript
运行
AI代码解释
复制
from pyspark.mllib.regression import LabeledPoint, LinearRegressionWithSGD
from numpy import array

# Load and parse the data
def parsePoint(line):
    values = [float(x) for x in line.replace(',', ' ').split(' ')]
    # UN-SCALE one of the features by a factor of 10
    values[3] *= 10

    return LabeledPoint(values[0], values[1:])

data = sc.textFile(spark_home+"data/mllib/ridge-data/lpsa.data")
parsedData = data.map(parsePoint)

# Build the model
model = LinearRegressionWithSGD.train(parsedData)

# Evaluate the model on training data
valuesAndPreds = parsedData.map(lambda p: (p.label,     model.predict(p.features)))
MSE = valuesAndPreds.map(lambda (v, p): (v - p)**2).reduce(lambda x, y: x + y) / valuesAndPreds.count()
print("Mean Squared Error = " + str(MSE))
print "Model coefficients:", str(model)

所以,我想我需要做功能缩放。如果我做了预缩放,它可以工作(因为我回到了缩放功能)。但是,现在我不知道如何在原始空间中得到系数。

代码语言:javascript
运行
AI代码解释
复制
from pyspark.mllib.regression import LabeledPoint, LinearRegressionWithSGD
from numpy import array
from pyspark.mllib.feature import StandardScaler
from pyspark.mllib.feature import StandardScalerModel

# Load and parse the data
def parseToDenseVector(line):
    values = [float(x) for x in line.replace(',', ' ').split(' ')]
    # UN-SCALE one of the features by a factor of 10
    values[3] *= 10
    return Vectors.dense(values[0:])

# Load and parse the data
def parseToLabel(values):
    return LabeledPoint(values[0], values[1:])

data = sc.textFile(spark_home+"data/mllib/ridge-data/lpsa.data")

parsedData = data.map(parseToDenseVector)
scaler = StandardScaler(True, True)
scaler_model = scaler.fit(parsedData)
parsedData_scaled = scaler_model.transform(parsedData)

parsedData_scaled_transformed = parsedData_scaled.map(parseToLabel)

# Build the model
model = LinearRegressionWithSGD.train(parsedData_scaled_transformed)

# Evaluate the model on training data
valuesAndPreds = parsedData_scaled_transformed.map(lambda p: (p.label, model.predict(p.features)))
MSE = valuesAndPreds.map(lambda (v, p): (v - p)**2).reduce(lambda x, y: x + y) / valuesAndPreds.count()
print("Mean Squared Error = " + str(MSE))
print "Model coefficients:", str(model)

所以,这里我有变换空间中的所有系数。现在我怎么去原来的地方?我也有StandardScalerModel对象的scaler_model。但我无法从中得到任何手段或差异。这个类唯一的公共方法是transform,它可以将点从原始空间转换到转换。但我不能让它倒转。

EN

回答 3

Stack Overflow用户

发布于 2015-12-06 06:06:50

我刚刚遇到了这个问题。如果训练数据中的f(x) = x值较高(>3),则模型甚至无法学习x。太可怕了。

我认为,与其缩放数据,另一种选择是更改步骤大小。这是在星火-1859年中讨论的。从那里转译:

在Lipschitz常数L上,步长应小于1。对于二次损失和GD,最优收敛发生在stepSize = 1/(2L)。火花有一个(1/n)乘子的损失函数。 假设您有n = 5数据点,最大的特性值是1500。所以L = 1500 * 1500 / 5。最优收敛发生在stepSize = 1/(2L) = 10 / (1500 ^ 2)

最后一个等式甚至没有意义(我们是如何在分子中得到2的?)但是我从来没有听说过Lipschitz常数,所以我没有资格去修正它。无论如何,我认为我们可以尝试不同的步长,直到它开始工作。

票数 2
EN

Stack Overflow用户

发布于 2015-07-10 12:50:07

要重新表述您的问题,您需要找到解方程的截距I、系数C_1C_2Y = I + C_1 * x_1 + C_2 * x_2 (其中x_1x_2没有缩放)。

i作为mllib返回的拦截。同样,让c_1c_2是mllib返回的系数(或权重)。

m_1x_1的非标度平均值,m_2x_2的非标度均值。

s_1x_1的未标度标准差,s_2x_2的未标度标准差。

然后是C_1 = (c_1 / s_1)C_2 = (c_2 / s_2),和

I = i - c_1 * m_1 / s_1 - c_2 * m_2 / s_2

这可以很容易地扩展到3个输入变量:

C_3 = (c_3 / s_3)I = i - c_1 * m_1 / s_1 - c_2 * m_2 / s_2 - c_3 * m_3 / s_3

票数 1
EN

Stack Overflow用户

发布于 2015-12-08 16:05:28

正如您所指出的,StandardScalerModel对象不公开std和平均属性。有一个问题,https://issues.apache.org/jira/browse/SPARK-6523

你可以很容易地自己计算。

代码语言:javascript
运行
AI代码解释
复制
import numpy as np
from pyspark.mllib.stat import Statistics

summary = Statistics.colStats(features)
mean = summary.mean()
std = np.sqrt(features.variance())

这些都是Scaler使用的相同的平均值和std。您可以使用python魔术dict验证这一点。

代码语言:javascript
运行
AI代码解释
复制
print scaler_model.__dict__.get('_java_model').std()
print scaler_model.__dict__.get('_java_model').mean()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30981471

复制
相关文章
对决!PHP vs Node.js !
这是典型好莱坞情节:分道扬镳的两位老朋友间的战斗。摩擦经常开始于一位对另一位不言而喻的领域感兴趣。这部电影的编程语言版本是Node.js的引入将好友情节变成一场旗鼓相当的比赛。PHP和JavaScript,两个曾经一起统治互联网的合作伙伴现在为了开发者心中的份额开始一决雌雄。
疯狂的技术宅
2019/03/27
2.4K0
对决!PHP vs Node.js !
WordPress Rank Math SEO插件任意元数据修改复现
Rank Math是一个WordPress插件,其开发人员称其为“WordPress (SEO)的瑞士军刀”,旨在帮助网站所有者通过搜索引擎优化(SEO)吸引更多流量到其网站。 该插件随附一个安装向导,可通过逐步安装过程对其进行配置,并支持Google架构标记(又名Rich Rich Snippets)、关键字优化、Google Search Console集成,Google关键字排名跟踪等。
Timeline Sec
2020/05/22
1K0
WordPress Rank Math SEO插件任意元数据修改复现
【专业技术】PHP对战Node.js
整个故事正如好莱坞大片的经典剧情走向:两位昔日好友如今分道扬镳,甚至被迫陷入了你死我活的斗争当中。刚开始的分歧并不严重,无非是一位老友对于另一位伙伴长久以来占据、但又绝口不提的业务领域产生了点兴趣。而在现实版的这场编程语言决斗大电影中,Node.js成了那位成了好兄弟反目成仇的导火索,并由此引发一场势均力敌、旗鼓相当的大战:PHP与JavaScript,双方曾一度携手统治整个互联网世界,但如今却为了争夺开发人员的支持而向对方痛下杀手。 遥想当年,合作关系总是简单而纯粹。那时候JavaScript负责处理
程序员互动联盟
2018/03/16
1.1K0
【专业技术】PHP对战Node.js
浅析 Node 进程与线程
进程与线程是操作系统中两个重要的角色,它们维系着不同程序的执行流程,通过系统内核的调度,完成多任务执行。今天我们从 Node.js(以下简称 Node)的角度来一起学习相关知识,通过本文读者将了解 Node 进程与线程的特点、代码层面的使用以及它们之间的通信。
山月
2020/05/26
9420
浅析 Node 进程与线程
node.js与ThreadLocal
ThreadLocal变量的说法来自于Java,这是在多线程模型下出现并发问题的一种解决方案。 ThreadLocal变量作为线程内的局部变量,在多线程下可以保持独立,它存在于 线程的生命周期内,可以在线程运行阶段多个模块间共享数据。那么,ThreadLocal变量 又如何与node.js扯上关系呢?
欲休
2018/08/01
1.4K0
Node.js 与未来
我是一个非常活跃的社区成员,我是 Node.js Collaborator,技术指导委员会成员,也是社区委员会的成员,并活跃在好几个工作组,我还是 OpenJS 基金会的活跃成员。同时也是 OpenJS 基金会跨项目理事会的投票成员,并已被选为 2020-2021 年度的 OpenJS 社区董事。你可以通过 Twitter(@mhdawson1)或 LinkedIn(https://www.linkedin.com/in/michael-dawson-6051282 )联系我。
五月君
2021/01/27
9530
Node.js 与未来
cocos2d-x 3.0 Node与Node层级结构
节点解释: 节点是场景图的基本元素。场景图的基本元素必须是节点对象或者是节点对象的子类。 其中主要可以看到Layer、MenuItem、Scene、Sprite、TMXTiledMap(解析and渲染TMX地图)、ParticleSystem(粒子系统基类)等等 Node是这些类的根类 节点的基本操作 创建节点    Node* childNode = Node::Create(); 增加新的子节点    node->addChild(childNode,z深度,tag); 查找子节点    Node* n
用户1624346
2018/04/17
6940
cocos2d-x 3.0 Node与Node层级结构
node.js学习与应用
学习资料 入门: 小白篇 http://samsungapps.csdn.net/text.html?arcid=311044 了解了 npm,类似于python的easy_install 把依赖的模
架构师刀哥
2018/03/20
1K0
Node.js 安装与开发
Node.js 简介 Node.js是一个Javascript运行环境(runtime),发布于2009年5月,由Ryan Dahl开发,实质是对Chrome V8引擎进行了封装。Node.js对一些特殊用例进行优化,提供替代的API,使得V8在非浏览器环境下运行得更好。 V8引擎执行Javascript的速度非常快,性能非常好。 Node.js是一个基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。 Node.js 使用事件驱动, 非
阳光岛主
2018/05/17
2.4K0
[MongoDB] mongodb与php
下载地址https://s3.amazonaws.com/drivers.mongodb.org/php/index.html
唯一Chat
2019/09/10
8370
PHP与Recursion
在程序设计中,递归(Recursion)是一个很常见的概念,合理使用递归,可以提升代码的可读性,但同时也可能会带来一些问题。
LA0WAN9
2021/12/14
7550
【Cocos2d-x】开发基础-Node与Node层级架构
本篇博客讲解: 1.Node与Node层级架构 2.Node中重要的操作 3.Node中重要的属性 4.游戏循环与调度
谙忆
2021/01/21
5930
【Cocos2d-x】开发基础-Node与Node层级架构
程序语言(python、php、Node.js)调用Redis
版权声明:本文为木偶人shaon原创文章,转载请注明原文地址,非常感谢。 https://blog.csdn.net/wh211212/article/details/53037946
shaonbean
2019/05/26
7800
PHP 基础之 PHP 函数与对象
本章主要介绍 PHP 的函数与对象的一些应用: <?php // PHP 函数与对象 print("test"); // 或 print "test"; echo(abs(5-8)); /
echobingo
2018/04/25
1.2K0
PHP 基础之 PHP 函数与对象
PHP 之 FastCGI 与 mod_php
网上对于FastCGI与mod_php的知识比较杂乱而不全面,故在此整理一下,以便入门学习者查阅方便。 背景PHP最常用的方式是以模块的方式(mod_php)运行在Apache中,也是Apache运行PHP的默认方式;但在Nginx中,Nginx又使用的是PHP-FPM,但是PHP-FPM到底是个什么东东?跟php有什么关系?今天我们一起来探究一番。
conanma
2021/12/02
8240
OLAP引擎:基于Presto组件进行跨数据源分析
Presto是一个开源的分布式SQL查询引擎,适用于交互式分析查询,数据量支持GB到PB字节,Presto虽然具备解析SQL的能力,但它并不属于标准的数据库范畴。
知了一笑
2021/04/29
1.2K0
OLAP引擎:基于Presto组件进行跨数据源分析
Node.js与PHP对战:一场关于开发者喜好的史诗级战役
整个故事正如好莱坞大片的经典剧情走向:两位昔日好友如今分道扬镳,甚至被迫陷入了你死我活的斗争当中。刚开始的分歧并不严重,无非是一位老友对于另一位伙伴长久以来占据、但又绝口不提的业务领域产生了点兴趣。而在现实版的这场编程语言决斗大电影中,Node.js成了那位成了好兄弟反目成仇的导火索,并由此引发一场势均力敌、旗鼓相当的大战:PHP与JavaScript,双方曾一度携手统治整个互联网世界,但如今却为了争夺开发人员的支持而向对方痛下杀手。
IT派
2018/07/30
4970
Node.js与PHP对战:一场关于开发者喜好的史诗级战役
Node 直出理论与实践总结
本文介绍了前端性能优化中的直出方案,通过减少HTTP请求、合并小文件、懒加载、使用服务器端渲染等方式来提高首屏渲染速度,降低白屏时间,从而提升用户体验。同时,总结了实施直出方案过程中的一些经验和教训,包括前端路由的使用和React同构直出优化等。
腾讯AlloyTeam
2017/04/27
2.2K0
node网页分段渲染与bigpipe(一)
页面渲染,通常来说分为前端渲染以及后端渲染。前端渲染指的是服务端返回html框架以及模版,前端通过ajax异步请求拉取数据渲染模版,并动态修改dom,形成最终页面。服务端渲染则是服务端通过在后端拉取数
IMWeb前端团队
2017/12/29
8670
node网页分段渲染与bigpipe(一)
node网页分段渲染与bigpipe(一)
页面渲染,通常来说分为前端渲染以及后端渲染。前端渲染指的是服务端返回html框架以及模版,前端通过ajax异步请求拉取数据渲染模版,并动态修改dom,形成最终页面。服务端渲染则是服务端通过在后端拉取数据以及后端模版渲完整页面,并返回到客户端。2种方法各有好处,后端渲染带来的则是首屏时间的提高,减少请求次数,利于SEO等好处。但是传统后端直出渲染需要等到整个网页渲染完成,才能返回到客户端。假如某个区块拉取数据比较慢,影响了渲染的速度,那对于用户来说,等待的时候也会跟着变长对于后端渲染能否跟前端ajax渲染一样,分块分区域传统的服务端直出渲染,下面将提供一种解决方案-网页分段渲染。
IMWeb前端团队
2019/12/04
7200
node网页分段渲染与bigpipe(一)

相似问题

增加REST-API、node + express中的时间

10

Laravel与独立的REST-API通信

11

将PHP转换为Python (Rest-API连接)

12

如何使用Node-RED REST-API按数字进行筛选

11

node.js与php的区别

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文