【问题标题】:Regression with a small dataset使用小数据集进行回归
【发布时间】:2019-09-04 03:00:11
【问题描述】:

我们检查了一个据称用于破解的软件。我们发现工作时间很大程度上取决于输入长度 N,尤其是当 N 大于 10-15 时。 在测试期间,我们修复了以下工作时间。

N = 2 - 16.38 seconds 
N = 5 - 16.38 seconds 
N = 10 - 16.44 seconds 
N = 15 - 18.39 seconds 
N = 20 - 64.22 seconds 
N = 30 - 65774.62 seconds

任务: 查找以下三种情况的程序工作时间 - N = 25,N = 40 和 N = 50。

我尝试进行多项式回归,但预测结果从 2,3 级开始变化,...

# Importing the libraries 
import numpy as np 
import matplotlib.pyplot as plt 

# Importing the dataset 
X = np.array([[2],[5],[10],[15],[20],[30]])
X_predict = np.array([[25], [40], [50]])
y = np.array([[16.38],[16.38],[16.44],[18.39],[64.22],[65774.62]])
#y = np.array([[16.38/60],[16.38/60],[16.44/60],[18.39/60],[64.22/60],[65774.62/60]])


# Fitting Polynomial Regression to the dataset 
from sklearn.preprocessing import PolynomialFeatures 

poly = PolynomialFeatures(degree = 11) 
X_poly = poly.fit_transform(X) 

poly.fit(X_poly, y) 
lin2 = LinearRegression() 
lin2.fit(X_poly, y) 

# Visualising the Polynomial Regression results 
plt.scatter(X, y, color = 'blue') 

plt.plot(X, lin2.predict(poly.fit_transform(X)), color = 'red') 
plt.title('Polynomial Regression') 


plt.show() 

# Predicting a new result with Polynomial Regression 
lin2.predict(poly.fit_transform(X_predict))

2 级的结果是

array([[ 32067.76147835],
       [150765.87808383],
       [274174.84800471]])

5 级的结果是

array([[  10934.83739791],
       [ 621503.86217946],
       [2821409.3915933 ]])

【问题讨论】:

  • 有什么问题?
  • 我应该使用什么回归模型

标签: python regression non-linear-regression


【解决方案1】:

在方程搜索后,我能够将数据拟合到方程“秒 = a * exp(b * N) + 偏移”,拟合参数 a = 2.5066753490350954E-05,b = 7.2292352155213369E-01,偏移 = 1.6562196782144639E+01 给出 RMSE = 0.2542 和 R 平方 = 0.99999。这种数据和方程的组合对初始参数估计极为敏感。如您所见,它应该在数据范围内以高精度进行插值。由于方程很简单,它可能会很好地推断出数据范围之外。据我了解,如果使用不同的计算机硬件或破解算法是并行的,那么此解决方案将与这些更改不匹配。

【讨论】:

  • 正是我想要的。我尝试过 exp 拟合,但我总是得到“函数调用次数已达到 maxfev = 800”你能解释一下你是如何得到结果的吗?
  • 我使用我的开源 Python 曲线拟合网站 zunzun.com 来执行方程搜索,它使用差分进化遗传算法来确定像这样的非线性方程的初始参数估计。在方程式搜索结果的最佳候选者中,这个似乎最有可能。然后我将您的数据粘贴到该等式的网站拟合界面zunzun.com/Equation/2/Exponential/Exponential%20With%20Offset 并点击提交按钮。
【解决方案2】:

由于这个程序是用来破解的,它可能会使用某种蛮力,导致性能时间呈指数级增长,所以最好找到解决方案

y = a + b * c^n

例如:

16.38 + 2.01^n / 20000

您可以尝试在LinearRegression 中预测log(time) 而不是time

【讨论】:

  • 你的直觉和建议都很棒,所以我投了赞成票。请看我对这个问题的回答。
猜你喜欢
  • 2017-05-11
  • 1970-01-01
  • 1970-01-01
  • 2020-12-28
  • 2015-07-21
  • 1970-01-01
  • 2013-10-23
  • 2015-07-11
  • 2015-10-03
相关资源
最近更新 更多