我正在尝试计算Numpy 中的最小二乘问题(即带有简单回归的普通最小二乘法 (OLS)),以便找到相应的 R\xc2\xb2 值。然而,在某些情况下,Numpy 返回残差的空列表。以下面的超定示例(即方程多于未知数)来说明此问题:
\n\n\n\n(注:没有常数因子(即截距)(即全 1 的初始列向量),因此将使用无中心平方和 (TSS)。)
\n\nimport numpy as np\n\nA = np.array([[6, 6, 3], [40, 40, 20]]).T\ny = np.array([0.5, 0.2, 0.6])\n\nmodel_parameters, residuals, rank, singular_values = np.linalg.lstsq(A, y, rcond=None)\n\n# No Intercept, therefore use Uncentered Total Sum of Squares (TSS)\nuncentered_tss = np.sum((y)**2) \nnumpy_r2 = 1.0 - residuals / uncentered_tss\n\nprint("Numpy Model Parameter(s): " + str(model_parameters))\nprint("Numpy Sum of Squared Residuals (SSR): " + str(residuals))\nprint("Numpy R\xc2\xb2: " …Run Code Online (Sandbox Code Playgroud) ( RMSE和MAE都是测量两个向量之间距离的方法:预测向量和目标值向量。各种距离测量或范数都是可能的。一般来说,计算向量的大小或长度是通常直接需要或作为更广泛的向量或向量矩阵运算的一部分。
尽管RMSE通常是回归任务的首选性能度量,但在某些情况下您可能更喜欢使用其他函数。例如,如果数据集中有许多异常值实例,在这种情况下,我们可以考虑使用平均绝对误差(MAE)。
更正式地说,规范指数越高,它就越关注大值而忽视小值。这就是 RMSE 比 MAE 对异常值更敏感的原因。) 来源:使用 scikit learn 和 tensorflow 进行机器学习实践。
因此,理想情况下,在任何数据集中,如果我们有大量异常值,则损失函数或向量范数“代表预测与真实标签之间的绝对差异;类似于y_diff下面的代码”应该会增长,如果我们增加标准...换句话说,RMSE 应该大于 MAE。--> 如果有错请纠正<--
根据这个定义,我生成了一个随机数据集,并向其中添加了许多异常值,如下面的代码所示。我计算了残差或许多 k 值(范围从 1 到 5)的lk_normy_diff。但是,我发现 lk_norm 随着 k 值的增加而减小;然而,我期望 RMSE(又名范数 = 2)大于 MAE(又名范数 = 1)。
我很想了解当我们增加 K(又名阶数)时,LK 范数是如何减少的,这与上面的定义相反。
预先感谢您的任何帮助!
代码:
import numpy as np
import plotly.offline as pyo
import plotly.graph_objs as go
from plotly import tools
num_points = 1000
num_outliers = 50
x = np.linspace(0, 10, …Run Code Online (Sandbox Code Playgroud) 我有一大堆3D数据点,我想要适合椭圆体.
我的数学很差,所以我在没有任何数学库的情况下无法实现最小二乘法.
有没有人知道或者有一段代码可以将椭球放到数据中,我可以直接插入到我的项目中?在C中最好,但是从C++,Java,C#,python等转换对我来说应该没问题.
编辑:能够找到该中心也将是一个巨大的帮助.请注意,这些点的间距不均匀,因此取平均值不会产生中心.
我有像这样的图像:

在这张图片中,红线是我想从图像中得到的.原始图像没有那条红线,只有那条绿色的道路.
我想要的是以等式的系数来估计图像中的曲线:A x ^ 2 + B x + C = 0.在图像中可能存在噪声(如上所示,边缘上有黑洞).
我试图通过使用最小二乘法(LSM)来解决这个问题,但这种方法存在两个问题:
即使在PC上,该方法也太慢,因为点数量很高.
在下列情况下,道路太宽:
左图像上的曲线被正确识别,但右侧不正确.我想,原因是道路太宽太短.

作为两种情况的解决方案,我想缩小道路.在理想情况下,它是上图中的红线.或者我想使用LSM进行线路检测(A x + B = 0)以优化处理时间.
我试过侵蚀图像 - 这是错误的方法.骷髅也不是正确的解决方案.
关于如何实现预期结果的任何想法(缩小道路)?或者针对这个问题的另一种方法的想法?
OpenCV cvSolve可以解决这样的线性最小二乘问题:
// model: y = a1*x1 + a2*x2 + a3
CvMat *y = cvCreateMat(N, 1, CV_64FC1);
CvMat *X = cvCreateMat(N, 3, CV_64FC1);
CvMat *coeff = cvCreateMat(3, 1, CV_64FC1);
// fill vector y and matrix X
for (int i=0; i<N; ++i)
{
cvmSet(y, i, 0, my_y_value(i) );
cvmSet(X, i, 0, my_x1_value(i) );
cvmSet(X, i, 1, my_x2_value(i) );
cvmSet(X, i, 2, 1 );
}
cvSolve(X, y, coeff, CV_SVD);
// now coeff contains a1, a2, a3
Run Code Online (Sandbox Code Playgroud)
但是,我想对我的数据点应用不同的权重.我如何应用权重?
我一直在使用我的Matlab,但我的愿景是最终切换到用Python完成所有分析,因为它是一种实际的编程语言和其他一些原因.
我一直试图解决的最近问题是对复杂数据进行最小二乘最小化.我是一名工程师,我们经常处理复杂的阻抗,我正在尝试使用曲线拟合将简单的电路模型拟合到测量数据中.
阻抗方程如下:
Z(w)= 1 /(1/R + j*w*C)+ j*w*L.
然后我试图找到R,C和L的值,以便找到最小二乘曲线.
我已经尝试使用优化包,例如optimize.curve_fit或optimize.leastsq,但它们不适用于复数.
然后我尝试使我的残差函数返回复杂数据的大小,但这也不起作用.
有人设法在Vowpal Wabbit中运行普通的最小二乘回归吗?我试图确认它将返回与确切解决方案相同的答案,即当选择最小化||y - X a||_2 + ||Ra||_2(其中R是正则化)时,我想得到分析答案
a = (X^T X + R^T R)^(-1) X^T y.在numpy python中进行这种类型的回归需要大约5行.
大众的文档表明它可以做到这一点(可能是"平方"的损失函数),但到目前为止,我还是无法让它接近匹配python结果.因为平方是默认的损失函数,我只是简单地称:
$ vw-varinfo input.txt
Run Code Online (Sandbox Code Playgroud)
其中input.txt有像这样的行
1.4 | 0:3.4 1:-1.2 2:4.0 .... etc
Run Code Online (Sandbox Code Playgroud)
我还需要大众电话中的其他参数吗?我无法理解(相当简单的)文档.
regression command-line-arguments least-squares vowpalwabbit
我正在尝试使用Python和Pandas 执行差异差异(使用面板数据和固定效果)分析.我没有经济学背景,我只是想过滤数据并运行我被告知的方法.但是,据我所知,我明白基本的diff-in-diffs模型如下所示:
也就是说,我正在处理一个多变量模型.
下面是R中的一个简单示例:
https://thetarzan.wordpress.com/2011/06/20/differences-in-differences-estimation-in-r-and-stata/
可以看出,回归将一个因变量和树组观察值作为输入.
我的输入数据如下所示:
Name Permits_13 Score_13 Permits_14 Score_14 Permits_15 Score_15
0 P.S. 015 ROBERTO CLEMENTE 12.0 284 22 279 32 283
1 P.S. 019 ASHER LEVY 18.0 296 51 301 55 308
2 P.S. 020 ANNA SILVER 9.0 294 9 290 10 293
3 P.S. 034 FRANKLIN D. ROOSEVELT 3.0 294 4 292 1 296
4 P.S. 064 ROBERT SIMON 3.0 287 15 288 17 291
5 P.S. 110 FLORENCE NIGHTINGALE 0.0 313 3 …Run Code Online (Sandbox Code Playgroud) 我将拟合与 optimize.curve_fit 和 optimize.least_squares 进行比较。使用曲线拟合,我将协方差矩阵 pcov 作为输出,我可以通过以下方式计算拟合变量的标准偏差误差:
perr = np.sqrt(np.diag(pcov))
Run Code Online (Sandbox Code Playgroud)
如果我使用least_squares 进行拟合,则不会得到任何协方差矩阵输出,并且无法计算变量的标准偏差误差。
这是我的例子:
#import modules
import matplotlib
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
from scipy.optimize import least_squares
noise = 0.5
N = 100
t = np.linspace(0, 4*np.pi, N)
# generate data
def generate_data(t, freq, amplitude, phase, offset, noise=0, n_outliers=0, random_state=0):
#formula for data generation with noise and outliers
y = np.sin(t * freq + phase) * amplitude + offset
rnd = np.random.RandomState(random_state)
error = …Run Code Online (Sandbox Code Playgroud) 亲爱的 stackoverflow 用户,
我正在尝试计算由一组 3D 点定义的任意(但光滑)表面上的法线向量。为此,我使用平面拟合算法,该算法根据计算法向量的点的 10 个最近邻点找到局部最小二乘平面。
然而,它并不总能找到看起来最好的飞机。因此,我想知道我的实现或算法是否存在缺陷。我正在使用奇异值分解,正如我在有关平面拟合主题的几个链接中发现的推荐的那样。这是在我的机器上重现该行为的代码:
#library imports
import numpy as np
import math
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
#values used for best plane fit
xyz = np.array([[-1.04194694, -1.17965867, 1.09517722],
[-0.39947906, -1.37104542, 1.36019265],
[-1.0634807 , -1.35020616, 0.46773962],
[-0.48640524, -1.64476106, 0.2726187 ],
[-0.05720509, -1.6791781 , 0.76964551],
[-1.27522669, -1.10240358, 0.33761405],
[-0.61274031, -1.52709874, -0.09945502],
[-1.402693 , -0.86807757, 0.88866091],
[-0.72520241, -0.86800727, 1.69729388]])
''' best plane fit'''
#1.calculate centroid of points and make points relative to it
centroid = …Run Code Online (Sandbox Code Playgroud) least-squares ×10
python ×5
numpy ×2
regression ×2
scipy ×2
algorithm ×1
c ×1
empty-list ×1
estimation ×1
geometry ×1
math ×1
norm ×1
opencv ×1
pandas ×1
panel-data ×1
plane ×1
python-2.7 ×1
statsmodels ×1
vowpalwabbit ×1