使用小型数据集进行回归

时间:2019-04-13 15:19:29

标签: python regression non-linear-regression

我们检查了一个据说用于破解的软件。我们发现工作时间很大程度上取决于输入长度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 ]])

2 个答案:

答案 0 :(得分:1)

由于该程序用于破解,因此可能会使用某种蛮力,从而导致指数级的性能时间,因此最好找到解决方案作为

  

y = a + b * c ^ n

例如:

  

16.38 + 2.01 ^ n / 20000

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

答案 1 :(得分:1)

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

enter image description here