我在这里一直在遵循类似的答案,但是在使用sk学和滚动应用时,我有一些问题。我试图创建z分数和做PCA滚动应用,但我继续得到'只有长度1数组可以转换为Python标量的错误。
按照前面的示例,我创建了一个数据帧
from sklearn.preprocessing import StandardScaler
import pandas as pd
import numpy as np
sc=StandardScaler()
tmp=pd.DataFrame(np.random.randn(2000,2)/10000,index=pd.date_range('2001-01-01',periods=2000),columns=['A','B'])
如果我使用滚动
命令:
tmp.rolling(window=5,center=False).apply(lambda x: sc.fit_transform(x))
TypeError: only length-1 arrays can be converted to Python scalars
我得到这个错误。但是,我可以创建具有均值和标准差的函数,没有问题。
def test(df):
return np.mean(df)
tmp.rolling(window=5,center=False).apply(lambda x: test(x))
我相信当我试图用z分数的当前值减去平均值时,会出现错误。
def test2(df):
return df-np.mean(df)
tmp.rolling(window=5,center=False).apply(lambda x: test2(x))
only length-1 arrays can be converted to Python scalars
我如何创建自定义滚动函数与skLearning首先标准化,然后运行PCA?
编辑:我意识到我的问题不太清楚,所以我再试一次。我想标准化我的值,然后运行PCA来获得每个因素解释的方差量。在不滚动的情况下这样做是相当简单的。
testing=sc.fit_transform(tmp)
pca=decomposition.pca.PCA() #run pca
pca.fit(testing)
pca.explained_variance_ratio_
array([ 0.50967441, 0.49032559])
我不能在滚动时使用相同的步骤。使用@piRSquared中的滚动zscore函数可以得到zscore。sklearn的PCA似乎与滚动应用自定义函数不兼容。(事实上,我认为大多数sklearn模块都是如此。)我只是想得到解释过的方差,它是一个一维项,但是下面的代码返回了一堆NaN。
def test3(df):
pca.fit(df)
return pca.explained_variance_ratio_
tmp.rolling(window=5,center=False).apply(lambda x: test3(x))
但是,我可以创建自己的解释方差函数,但这也不起作用。
def test4(df):
cov_mat=np.cov(df.T) #need covariance of features, not observations
eigen_vals,eigen_vecs=np.linalg.eig(cov_mat)
tot=sum(eigen_vals)
var_exp=[(i/tot) for i in sorted(eigen_vals,reverse=True)]
return var_exp
tmp.rolling(window=5,center=False).apply(lambda x: test4(x))
我得到了这个错误0维数组。数组必须至少是二维的
。
总结一下,我想运行滚动的z分数,然后滚动pca输出每个滚动的解释方差。我有滚动的z分数,但没有解释方差。
由于lambda函数中的x表示(滚动)系列/ndarray,lambda函数可以这样编码(其中x[-1]指当前滚动数据点):
zscore = lambda x: (x[-1] - x.mean()) / x.std(ddof=1)
然后就可以打电话了:
tmp.rolling(5).apply(zscore)
还注意到tmp中的自由度默认为1。滚动(5)。std()
为了生成与@piRSquared相同的结果,必须为x.std()
指定ddof,其默认值为0--花了很长时间才弄明白!
正如@BrenBarn所评论的,滚动函数需要将向量减少为单个数字。以下内容相当于您试图做的事情,请帮助我们突出问题所在。
zscore = lambda x: (x - x.mean()) / x.std()
tmp.rolling(5).apply(zscore)
TypeError: only length-1 arrays can be converted to Python scalars
在zscore
函数中,x.mean()
减少,x.std()
减少,但x
是一个数组。因此,整个东西就是一个数组。
解决此问题的方法是对z分数计算中需要滚动的部分执行滚动,而不是对导致问题的部分执行滚动。
(tmp - tmp.rolling(5).mean()) / tmp.rolling(5).std()
Web 第三方应用开发-创建应用 创建入口 录入信息 Web 第三方应用开发-创建应用 更新时间:2018-08-08 15:14:14 本章介绍如何创建一个第三方应用。 创建入口 进入应用管理列表页,点击“新增应用”按钮: 录入信息 填写应用的基本信息: 包含5个字段和选项: 应用类型,选择“服务端应用”; 框架,选择 “自定义”; 起始版本,应用的起始版本,默认从 1.0.0 开始; 应用名称
我为gradle创建了一个简单的基于groovy的插件。 在我的毕业典礼上。构建文件我有以下内容: 一切都很好,我得到了一个构建目录和一个. jar在lib文件夹中生成,我想这是独立的插件。 现在我想知道如何将这个新插件注册到我的gradle安装中,这样我就可以应用插件了:“myPlugin”我做了以下工作: 将插件放入安装中的插件文件夹 创建了myplugin.properties文件并将其包含
问题内容: 我一直在尝试了解如何生成动态Flask URL。我已经阅读了文档和一些示例,但无法弄清楚为什么此代码不起作用: 我希望将index.html模板提供给,但事实并非如此。我收到一个构建错误。我想念什么? 如果我使用固定路径(如),则一切正常。 问题答案: 你已经拥有了很多东西。你需要做的就是使用语法(或适当的语法)修饰视图函数。 当Flask像你尝试使用的那样从动态路由的URL中提取变量
easySwoole支持路由拦截。其路由利用fastRoute实现,因此其路由规则与其保持一致,该组件的详细文档请参考 GitHub文档 使用指导 若需要在asySwoole使用自定义路由拦截功能,请在应用目录的Http控制器目录下(默认为HttpController)下,建立Router类, 井继承\EasySwoole\Core\Http\AbstractInterface\Router实现r
Apache可以让网站管理员自己自定义对一些错误和问题的响应。 自定义的响应可以定义为当服务器检测到错误或问题时才被激活。 如果一个脚本崩溃并产生"500 Server Error"响应,那么这个响应可以被更友好的提示替换或者干脆用重定向语句跳到其他的URL(本地的或外部的)。 行为 老式的行为 Apache1.3 会响应一些对于用户没有任何意义的错误或问题信息,而且不会将产生这些错误的原因写入日
我是一名开发人员,为我的客户开发一个私人应用程序。该应用程序已经通过Google Play控制台作为私人应用程序上传到Google Play商店(使用托管的Google Play)。 我发现可以通过Google Play自定义应用发布API发布私人应用(https://developers.google.com/android/work/play/custom-app-api/publish)这大