GVKun编程网logo

python将pandas数据框,参数和函数传递给scipy.optimize.minimize(pandas模块用函数 把数据写入csv文件)

24

关于python将pandas数据框,参数和函数传递给scipy.optimize.minimize和pandas模块用函数把数据写入csv文件的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多

关于python将pandas数据框,参数和函数传递给scipy.optimize.minimizepandas模块用函数 把数据写入csv文件的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于electron 在window 上 maximize minimize restore 三个函数无效、FILEminimizer Office,FILEminimizer Suite和FILEminimizer Server常见问题FAQ合集(一)、Jacobian和Hessian在`scipy.optimize.minimize`中输入、javascript-如何在TensorFlow.js中的maxPooling层上使用optimizer.minimize等相关知识的信息别忘了在本站进行查找喔。

本文目录一览:

python将pandas数据框,参数和函数传递给scipy.optimize.minimize(pandas模块用函数 把数据写入csv文件)

python将pandas数据框,参数和函数传递给scipy.optimize.minimize(pandas模块用函数 把数据写入csv文件)

我正在尝试使用SciPy的scipy.optimize.minimize函数来最小化我创建的函数。但是,我尝试对其进行优化的功能本身是由其他基于熊猫DataFrame执行计算的功能构成的。

我了解SciPy的最小化函数可以通过元组输入多个参数(例如,scipy最小化函数的输入结构)。但是,我不知道如何传递依赖于熊猫DataFrame的函数。

我在下面创建了一个可复制的示例。

import pandas as pd
import numpy as np
from scipy.stats import norm
from scipy.optimize import minimize


####################     Data     ####################
# Initialize dataframe. 
data = pd.DataFrame({'id_i': ['AA','BB','CC','XX','DD'],'id_j': ['ZZ','YY','AA'],'y': [0.30,0.60,0.70,0.45,0.65],'num': [1000,2000,1500,1200,1700],'bar': [-4.0,-6.5,1.0,-3.0,-5.5],'mu': [-4.261140,-5.929608,1.546283,-1.810941,-3.186412]})

data['foo_1'] = data['bar'] - 11 * norm.ppf(1/1.9)
data['foo_2'] = data['bar'] - 11 * norm.ppf(1 - (1/1.9))

# Store list of ids.
id_list = sorted(pd.unique(pd.concat([data['id_i'],data['id_j']],axis=0)))


####################     Functions     ####################
# Function 1: Intermediate calculation to calculate predicted values.
def calculate_y_pred(row,delta_params,sigma_param,id_list):

    # Extract the relevant values from delta_params.
    delta_i = delta_params[id_list.index(row['id_i'])]
    delta_j = delta_params[id_list.index(row['id_j'])]

    # Calculate adjusted version of mu. 
    mu_adj = row['mu'] - delta_i + delta_j

    # Calculate predicted value of y.
    y_pred = norm.cdf(row['foo_1'],loc=mu_adj,scale=sigma_param) / \
                (norm.cdf(row['foo_1'],scale=sigma_param) + 
                    (1 - norm.cdf(row['foo_2'],scale=sigma_param)))

    return y_pred

# Function to calculate the log-likelihood (for a row of DataFrame data).
def loglik_row(row,id_list):

    # Calculate the log-likelihood for this row.
    y_pred = calculate_y_pred(row,id_list)
    y_obs = row['y']
    n = row['num']
    loglik_row = np.log(norm.pdf(((y_obs - y_pred) * np.sqrt(n)) / np.sqrt(y_pred * (1-y_pred))) / 
                            np.sqrt(y_pred * (1-y_pred) / n))

    return loglik_row

# Function to calculate the sum of the negative log-likelihood. 
# This function is called via SciPy's minimize function.
def loglik_total(data,id_list,params):

    # Extract parameters.
    delta_params = list(params[0:len(id_list)])
    sigma_param = init_params[-1]

    # Calculate the negative log-likelihood for every row in data and sum the values.
    loglik_total = -np.sum( data.apply(lambda row: loglik_row(row,id_list),axis=1) )

    return loglik_total


####################     Optimize     ####################
# Provide initial parameter guesses. 
delta_params = [0 for id in id_list]
sigma_param = 11
init_params = tuple(delta_params + [sigma_param])

# Maximize the log likelihood (minimize the negative log likelihood). 
minimize(fun=loglik_total,x0=init_params,args=(data,method='nelder-mead')

这将导致以下错误:(AttributeError: 'numpy.ndarray' object has no attribute 'apply'整个错误输出在下面)。我相信这个错误是因为minimize将其X视为numpy数组,而我想将其作为pandas
DataFrame传递。

AttributeError: 'numpy.ndarray' object has no attribute 'apply'
AttributeErrorTraceback (most recent call last)
<ipython-input-93-9a5866bd626e> in <module>()
      1 minimize(fun=loglik_total,----> 2             args=(data,method='nelder-mead')
/Users/adam/anaconda/lib/python2.7/site-packages/scipy/optimize/_minimize.pyc in minimize(fun,x0,args,method,jac,hess,hessp,bounds,constraints,tol,callback,options)
    436                       callback=callback,**options)
    437     elif meth == 'nelder-mead':
--> 438         return _minimize_neldermead(fun,**options)
    439     elif meth == 'powell':
    440         return _minimize_powell(fun,**options)
/Users/adam/anaconda/lib/python2.7/site-packages/scipy/optimize/optimize.pyc in _minimize_neldermead(func,maxiter,maxfev,disp,return_all,initial_simplex,xatol,fatol,**unknown_options)
    515 
    516     for k in range(N + 1):
--> 517         fsim[k] = func(sim[k])
    518 
    519     ind = numpy.argsort(fsim)
/Users/adam/anaconda/lib/python2.7/site-packages/scipy/optimize/optimize.pyc in function_wrapper(*wrapper_args)
    290     def function_wrapper(*wrapper_args):
    291         ncalls[0] += 1
--> 292         return function(*(wrapper_args + args))
    293 
    294     return ncalls,function_wrapper
<ipython-input-69-546e169fc54e> in loglik_total(data,params)
      6 
      7     # Calculate the negative log-likelihood for every row in data and sum the values.
----> 8     loglik_total = -np.sum( data.apply(lambda row: loglik_row(row,axis=1) )
      9 
     10     return loglik_total
AttributeError: 'numpy.ndarray' object has no attribute 'apply'

在SciPy的函数中处理DataFramedata并调用我的函数的正确方法是什么?任何建议都欢迎,我们将不胜感激。loglik_total``minimize

可能的解决方案: 注意,我考虑过可以编辑函数以将其data视为numpy数组,而不是pandas
DataFrame。但是,由于以下两个原因,我想避免这种情况:1)中loglik_total,我使用pandasapply函数将loglik_row函数应用于的每一行data;2)data通过其列名而不是数字索引来引用列很方便。

electron 在window 上 maximize minimize restore 三个函数无效

electron 在window 上 maximize minimize restore 三个函数无效

electron 在window 上 maximize minimize restore 三个方法死活不生效。

原来是在调用整个三个方法前需要把窗口焦点去除,才能正确触发

   ipcMain.on(''videoWindow.toggleMaximize'', (event: any, data: string) => {
      this.mainAppWindow.blur();
      if (this.mainAppWindow.isMaximized()) {
        // true表示窗口已最大化.
        this.mainAppWindow.restore(); // 将窗口恢复为之前的状态
      } else {
        this.mainAppWindow.maximize(); // 窗口最大化
      }
      this.mainAppWindow.focus();
    });
``

FILEminimizer Office,FILEminimizer Suite和FILEminimizer Server常见问题FAQ合集(一)

FILEminimizer Office,FILEminimizer Suite和FILEminimizer Server常见问题FAQ合集(一)

FILEminimizer Office,FILEminimizer Suite和FILEminimizer Server常见问题FAQ合集。

1、我的序列号和注册信息都无法使用?

注册信息包括三部分:“序列号”,“字段 #1”以及“字段 #2”-要成功注册你的软件这些信息都是必须。
为了确保你的注册没有任何问题,请从发送给你的邮件中复制注册信息,然后粘贴到相应的注册字段。
请参考以下截图。

 

2、我忘记了我的注册信息和/或应用程序下载的链接,我怎么样才能重新找回它们?

请直接联系中国经销商重庆慧都科技有限公司。

请提供给我们您的Cleverbridge相关信息。这些信息包含在您完成采购的确认邮件里面,和您的发票上面。
请注意如果没有这些信息的话,balesio将会收取您恢复注册信息的费用。

 

3、我可以得到技术支持吗?

每个注册的balesio用户都可以得到我们的技术支持。然后,因为我们的销售和支持团队会收到大量的提问,所有回复这些提问的优先权由以下因素决定:

  1. 拥有有效Premium Pack的注册用户(包括所有的软件升级,更新和技术支持的年费)

  2. 注册用户

  3. 提一般支持问题的非注册用户

对于提出支持请求的注册用户,请提供给我们您的Cleverbridge相关信息。这个信息可以在你完成购买后的确认邮件中找到和您的发票信息中找到。

 

4、我的支持请求需要提供什么样的信息?

当报告问题时,请提供包括以下的信息:

  1. 如果要求的话,您能重现问题吗?如果可以,怎么重现?

  2. 你在运行哪个版本的Windows操作系统(Windows XP、Windows Vista等等)?

  3. 你在运行balesio哪个版本的软件和产品(Help | “About FILEminimizer Office”)?请在你的问题报告中包括完整的“version”。

  4. 如果对话框中出现了错误的信息,请提供包括对话框和标题栏的文本信息。

5、我可以压缩什么类型的PowerPoint文件?

您能优化微软PowerPoint 97至2010创建的任何版本的PowerPoint文件。FILEminimizer完全支持Office 2010所有的新格式文件(PPTX)。即便已创建为OpenOffice或StarOffice文件,只要它们被保存为微软PowerPoint格式,也是可以被优化的。

 

6、我可以压缩什么类型的Word文件?

您能优化微软Word 97至2010创建的任何版本的Word文件。FILEminimizer完全支持Office 2010所有的新格式文件(DOCX)。即便已创建为OpenOffice或StarOffice文件,只要它们被保存为微软Word格式,也是可以被优化的。

 

7、我可以压缩什么类型的Excel文件?

您能优化微软Excel 97至2010创建的任何版本的Excel表格。FILEminimizer完全支持Office 2010所有的新格式文件(XLSX)。即便已创建为OpenOffice或StarOffice文件,只要它们被保存为微软Excel格式,也是可以被优化的。

 

8、可作为哪个微软Outlook版本的插件?

Outlook 2000以后的都可作为插件。

 

9、可作为哪个IBM Lotus Notes版本的插件?

Lotus Notes 6.0以后的都可作为插件。

 

10、我压缩了我的文件,压缩后的文件很小,是怎么回事呢?

FILEminimizer优化图表,图片和包含在PowerPoint, Word 和 Excel文件中的嵌入对象。下面的一些因素可能解释压缩成小文件的结果:

  • 你在你的PPT或PPS幻灯片中包含了音频或视频文件

  • 你在大型的Excel表格上操作,这个表格包含了大量宏,但是却没包含图像,或少量的图像

  • 你的文件被加密了和/或在优化的时候,它正在使用中

  • 你正在设法优化已损坏或被破坏的文件

  • 你正设法优化版本非常老的文件(Office 95或更早)

11、我不能通过“打包/发送”或“邮件文件”按钮来发送我的文件。

此功能是使用Windows操作系统中的MAPI接口。操作系统通过这个程序接口,进行数据的交互,并将其发送到适当的电子邮件软件。如果

您的电子邮件软件不支持此MAPI接口,您将得到一个错误信息。请检查您的电子邮件程序是否支持这个接口,并检查这个软件是否被指定

为Internet选项中默认电子邮件程序。


12、我能采用批处理方式对几个文件进行选择和优化吗?

是的,当然可以。可有不同的方式来实现:

  1. 通过Windows Explorer或FILEminimizer搜索功能对您此处的文件进行浏览

  2. 选择几个文件或直接用CTRL + A选择全部文件

  3. 右键单击选定的文件,并在菜单中选择“FILEminimizer”,将所有的兼容文件加载到FILEminimizer中

  4. 如果FILEminimizer是打开的,您可直接将文件“拖拽”到程序中

  5. 您也可以使用工具栏上的“打开”选项,在FILEminimizer中选择你的文件进行优化

Jacobian和Hessian在`scipy.optimize.minimize`中输入

Jacobian和Hessian在`scipy.optimize.minimize`中输入

我试图了解“
dogleg”方法在Pythonscipy.optimize.minimize函数中的工作方式。我正在调整帮助页面底部的示例。

根据注释,dogleg方法需要一个Jacobian和Hessian参数。为此,我使用了numdifftools包装:

import numpy as npfrom scipy.optimize import minimizefrom numdifftools import Jacobian, Hessiandef fun(x,a):    return (x[0] - 1)**2 + (x[1] - a)**2x0 = np.array([2,0]) # initial guessa = 2.5res = minimize(fun, x0, args=(a), method=''dogleg'',               jac=Jacobian(fun)([2,0]), hess=Hessian(fun)([2,0]))print(res)

编辑:

如果我按照以下帖子的建议进行了更改,

res = minimize(fun, x0, args=a, method=''dogleg'',               jac=Jacobian(lambda x: fun(x,a)),               hess=Hessian(lambda x: fun(x,a)))

我得到一个错误TypeError: <lambda>() takes 1 positional argument but 2 weregiven。我究竟做错了什么?

在最初的猜测中计算Jacobian和Hessian是否正确x0

答案1

小编典典

该错误是来自和的调用,JacobianHessian不是来自的调用minimize。替换为Jacobian(fun)Jacobian(lambdax: fun(x, a))并类似地Hessian应该可以解决问题(因为现在要区分的函数只有一个向量参数)。

另一件事:(a)a,如果您希望将其用作元组使用(a,)

import numpy as npfrom scipy.optimize import minimizefrom numdifftools import Jacobian, Hessiandef fun(x, a):    return (x[0] - 1) **2 + (x[1] - a) **2def fun_der(x, a):    return Jacobian(lambda x: fun(x, a))(x).ravel()def fun_hess(x, a):    return Hessian(lambda x: fun(x, a))(x)x0 = np.array([2, 0]) # initial guessa = 2.5res = minimize(fun, x0, args=(a,), method=''dogleg'', jac=fun_der, hess=fun_hess)print(res)

javascript-如何在TensorFlow.js中的maxPooling层上使用optimizer.minimize

javascript-如何在TensorFlow.js中的maxPooling层上使用optimizer.minimize

当在模型.predict()中使用optimizer.minimize()来训练tensorflow.js中具有损失函数的模型时,我遇到了一个问题.仅当我在卷积神经网络中使用maxPooling2D层且代码类似于以下代码时,才会发生这种情况.产生此错误:无法读取未定义的属性“后端”.我不确定是什么原因引起的或如何解决.当使用没有任何池化层的卷积层(tf.layers.conv2d())时,不会发生此错误.我正在使用tensorflow.js版本0.14.2和Google Chrome版本71.0.3578.98.可以使用以下代码来重现此错误:

loss = (pred,label) => pred.sub(label).square().mean();
optimizer = tf.train.sgd(0.001);

const input = tf.input({shape: [100,100,4]});
const conv = tf.layers.conv2d({
    kernelSize: 5,filters: 8,strides: 1,activation: 'relu',kernelInitializer: 'VarianceScaling'
});
const pool = tf.layers.maxPooling2d({
    poolSize: [2,2],strides: [2,2]
});
const flat = tf.layers.flatten();
const dense = tf.layers.dense({units: 10});
const output = dense.apply(flat.apply(pool.apply(conv.apply(input))));
const model = tf.model({inputs: input,outputs: output});

for (var i = 0; i < 10; i++) {
    optimizer.minimize(() =>
        loss(model.predict([tf.ones([1,4])]),tf.ones([1,10]))
    );
}
@H_301_8@

编辑:这已经解决.有关详细信息,请参见scai’s answer.

编辑2:这似乎不是错误,而是对model.predict()的反向传播进行了更改. More information

最佳答案
在tensorflow.js 0.14中,有一个更改禁用了Model.predict()方法中的反向传播支持.您可以将Model.apply()方法与{training:true}标志一起使用来修复代码.

即改变

    optimizer.minimize(() =>
    loss(model.predict([tf.ones([1,10]))
);
@H_301_8@

   optimizer.minimize(() =>
    loss(model.apply([tf.ones([1,4])],{training: true}),10]))
);
@H_301_8@

今天关于python将pandas数据框,参数和函数传递给scipy.optimize.minimizepandas模块用函数 把数据写入csv文件的分享就到这里,希望大家有所收获,若想了解更多关于electron 在window 上 maximize minimize restore 三个函数无效、FILEminimizer Office,FILEminimizer Suite和FILEminimizer Server常见问题FAQ合集(一)、Jacobian和Hessian在`scipy.optimize.minimize`中输入、javascript-如何在TensorFlow.js中的maxPooling层上使用optimizer.minimize等相关知识,可以在本站进行查询。

本文标签: