假设我有一些数据,我想在其上安装一个参数化模型.我的目标是为此模型参数找到最佳值.
我正在使用AIC/BIC/MDL类型的标准进行模型选择,这种标准可以奖励低误差的模型,但也会对高复杂度的模型进行惩罚(我们正在寻找对这些数据最简单但最有说服力的解释,可以这么说,奥卡姆的剃刀).
按照上面的说明,这是我得到的三种不同标准的例子(两个要最小化,一个要最大化):

在视觉上你可以很容易地看到肘部形状,你会在该区域的某处选择一个参数值.问题是我正在为大量实验做这件事,我需要一种方法来找到这个值而不需要干预.
我的第一个直觉是尝试从角落以45度角绘制一条直线并继续移动它直到它与曲线相交,但这说起来容易做起来:)如果曲线有些偏斜,它也会错过感兴趣的区域.
关于如何实现这个或更好的想法的任何想法?
以下是重现上述一个图表所需的样本:
curve = [8.4663 8.3457 5.4507 5.3275 4.8305 4.7895 4.6889 4.6833 4.6819 4.6542 4.6501 4.6287 4.6162 4.585 4.5535 4.5134 4.474 4.4089 4.3797 4.3494 4.3268 4.3218 4.3206 4.3206 4.3203 4.2975 4.2864 4.2821 4.2544 4.2288 4.2281 4.2265 4.2226 4.2206 4.2146 4.2144 4.2114 4.1923 4.19 4.1894 4.1785 4.178 4.1694 4.1694 4.1694 4.1556 4.1498 4.1498 4.1357 4.1222 4.1222 4.1217 4.1192 4.1178 4.1139 4.1135 4.1125 4.1035 4.1025 4.1023 4.0971 4.0969 4.0915 …Run Code Online (Sandbox Code Playgroud) 我正在探索一些数据,所以我想要做的第一件事就是尝试将正态(高斯)分布拟合到它.这是我第一次在R中尝试这个,所以我一步一步.首先我预先分类我的数据:
myhist = data.frame(size = 10:27, counts = c(1L, 3L, 5L, 6L, 9L, 14L, 13L, 23L, 31L, 40L, 42L, 22L, 14L, 7L, 4L, 2L, 2L, 1L) )
qplot(x=size, y=counts, data=myhist)
Run Code Online (Sandbox Code Playgroud)

由于我需要计数,我需要添加一个归一化因子(N)来扩大密度:
fit = nls(counts ~ N * dnorm(size, m, s), data=myhist, start=c(m=20, s=5, N=sum(myhist$counts)) )
Run Code Online (Sandbox Code Playgroud)
然后我创建适合显示的数据,一切都很好:
x = seq(10,30,0.2)
fitted = data.frame(size = x, counts=predict(fit, data.frame(size=x)) )
ggplot(data=myhist, aes(x=size, y=counts)) + geom_point() + geom_line(data=fitted)
Run Code Online (Sandbox Code Playgroud)

当我发现这个线程谈到使用geom_smooth()一步完成所有这一切时,我很兴奋,但我无法让它工作:
这是我尝试的......以及我得到的:
ggplot(data=myhist, aes(x=size, y=counts)) + geom_point() + geom_smooth(method="nls", formula = counts ~ N * …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用scikit-learn中包含的广义线性模型拟合方法拟合向量自回归(VAR)模型.线性模型的形式为y = X w,但系统矩阵X具有非常独特的结构:它是块对角线,并且所有块都是相同的.为了优化性能和内存消耗,模型可以表示为Y = BW,其中B是来自X的块,Y和W现在是矩阵而不是向量.LinearRegression,Ridge,RidgeCV,Lasso和ElasticNet类很容易接受后一种模型结构.但是,由于Y是二维的,因此适合LassoCV或ElasticNetCV失败.
我发现https://github.com/scikit-learn/scikit-learn/issues/2402 从这个讨论中,我假定LassoCV/ElasticNetCV的行为意图.除了手动实现交叉验证之外,有没有办法优化alpha/rho参数?
此外,scikit-learn中的贝叶斯回归技术也期望y是一维的.有没有办法解决?
注意:我使用scikit-learn 0.14(稳定)
python machine-learning linear-regression model-fitting scikit-learn
我一直在R做一些数据分析,我试图找出如何使我的数据适合3参数Weibull分布.我找到了如何使用2参数Weibull来完成它,但是在找到如何使用3参数进行操作方面做得不够.
以下是我使用包中的fitdistr函数来拟合数据的方法MASS:
y <- fitdistr(x[[6]], 'weibull')
Run Code Online (Sandbox Code Playgroud)
x[[6]] 是我的数据的子集,y是我存储拟合结果的地方.
我试图理解为什么scipy.optimize.least_squares存在于scipy. 该函数可用于执行模型拟合。然而,人们可以用来scipy.optimize.minimize做同样的事情。唯一的区别是,scipy.optimize.least_squares卡方是在内部计算的,而如果想使用scipy.optimize.minimize,他/她将必须在用户想要最小化的函数内部手动计算卡方。另外,scipy.optimize.least_squares不能将其视为包装器,scipy.optimize.minimize因为它支持的三种方法 ( trf、dogbox、lm) 根本不支持scipy.optimize.minimize。
所以我的问题是:
scipy.optimize.least_squares当使用 可以达到相同的结果时为什么还要存在scipy.optimize.minimize?scipy.optimize.minimize不支持trf、dogbox、 和lm方法?谢谢。
我是PyMC的新手,并尝试使用最大后验估计来拟合我的非齐次泊松过程和分段恒定速率函数.
我的过程描述了一天中的一些事件.因此,我将一天分成24小时,这意味着,我的速率函数中有24个常数(分段常数).
结合以下思路:
我提出了以下一段代码,这是不满意的(结果明智,我确定这是错的):
import numpy as np
import pymc
eventCounter = np.zeros(24) # will be filled with real counts before going on
alpha = 1.0 / eventCounter.mean()
a0 = pymc.Exponential('a0', alpha)
a1 = pymc.Exponential('a1', alpha)
a2 = pymc.Exponential('a2', alpha)
a3 = pymc.Exponential('a3', alpha)
a4 = pymc.Exponential('a4', alpha)
a5 = pymc.Exponential('a5', alpha)
a6 = pymc.Exponential('a6', alpha)
a7 = pymc.Exponential('a7', alpha)
a8 = pymc.Exponential('a8', alpha)
a9 = pymc.Exponential('a9', alpha)
a10 = pymc.Exponential('a10', alpha) …Run Code Online (Sandbox Code Playgroud) 我有该形式的实验数据(X,Y)和该形式的理论模型,(x(t;*params),y(t;*params))其中t是物理(但不可观察)变量,*params是我想要确定的参数。是连续变量,模型中和之间存在t1:1 关系。xtyt
在完美的世界中,我会知道(参数的真实世界值)的值T,并且能够进行极其基本的最小二乘拟合来找到 的值*params。(请注意,我并没有x尝试在图中“连接”和的值y,例如31243002或31464345。)我无法保证在我的实际数据中,潜在值T是单调的,因为我的数据是跨多个周期收集的。
我对手动进行曲线拟合不太有经验,并且必须使用极其粗糙的方法,而无法轻松访问基本的 scipy 函数。我的基本方法包括:
*params并将其应用于模型t并将其放入模型中以创建一个数组model(*params) = (x(*params),y(*params))X(数据值)插值model得到Y_predictedY在和之间运行最小二乘(或其他)比较Y_predicted*params*params这种方法有几个明显的问题。
1)我在编码方面没有足够的经验来开发一个非常好的“再做一次”,而不是“尝试解决方案空间中的所有内容”,或者“在粗网格中尝试所有内容”,然后“在稍微稍稍的范围内再次尝试所有内容”在粗网格的热点中形成更细的网格。” 我尝试做MCMC方法,但我从未找到任何最佳值,主要是因为问题2
2)步骤2-4本身效率非常低。
我尝试过类似的东西(类似于伪代码;实际的函数是组成的)。关于在 A、B 上使用广播可能会出现许多小问题,但这些问题没有需要对每个步骤进行插值的问题那么重要。
我认识的人建议使用某种期望最大化算法,但我对此了解不够,无法从头开始编写代码。我真的希望有一些很棒的 scipy (或其他开源)算法我还没有找到能够解决我的整个问题,但目前我不抱希望。
import numpy as np
import scipy as sci
from …Run Code Online (Sandbox Code Playgroud) 我的数据框包含年,月,日,小时,分钟,秒,Daily_KWH列.我需要使用神经网络来预测每日KWH.请让我知道如何去做
Daily_KWH_System year month day hour minute second
0 4136.900384 2016 9 7 0 0 0
1 3061.657187 2016 9 8 0 0 0
2 4099.614033 2016 9 9 0 0 0
3 3922.490275 2016 9 10 0 0 0
4 3957.128982 2016 9 11 0 0 0
Run Code Online (Sandbox Code Playgroud)
当我适应模型时,我得到了价值错误.
代码到目前为止:
X = df[['year','month','day','hour','minute','second']]
y = df['Daily_KWH_System']
from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y)
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
# Fit only to the training …Run Code Online (Sandbox Code Playgroud) classification neural-network model-fitting python-3.x valueerror
考虑使用以下 sklearn Pipeline:
pipeline = make_pipeline(
TfidfVectorizer(),
LinearRegression()
)
Run Code Online (Sandbox Code Playgroud)
我已经进行了TfidfVectorizer预训练,所以当我打电话时pipeline.fit(X, y)我只想LinearRegression进行安装,而不想重新安装TfidfVectorizer。
我能够提前应用转换并适应LinearRegression转换后的数据,但在我的项目中,我的管道中有很多变压器,其中一些经过预训练,有些则没有,所以我正在寻找一种不围绕 sklearn 估计器编写另一个包装器并保持在一个对象的范围内Pipeline。
在我看来,它应该是估计器对象中的一个参数,代表在调用.fit()如果对象已经安装时不重新安装对象。
model-fitting ×10
python ×5
r ×3
scikit-learn ×2
algorithm ×1
distribution ×1
ggplot2 ×1
matlab ×1
mcmc ×1
pandas ×1
pipeline ×1
pymc ×1
python-3.x ×1
scipy ×1
statistics ×1
statsmodels ×1
valueerror ×1
weibull ×1