预测新数据点的实际价值

时间:2018-03-19 04:46:30

标签: python machine-learning interpolation

假设我有数据点:

x = [(1, 2), (1, 5), (1, 6), (2, 4), (2, 5), (2, 7), (3, 1), (3, 5), (3, 6)] 
y = [2.3,5.6,9.0,8.6,4.2,13.5,11.0,1.3,5.0]

现在我想预测一些新对的y值,比如说(2,3),(3,4) 建议我使用相同的python代码。

我尝试过插值但是无法得到结果,我认为有些机器学习会做到,但我在机器学习方面真的很新。 建议我一个python代码相同。 我正在处理的实际数据类似于这些虚拟数据。Want to predict values of missing point in the given image

2 个答案:

答案 0 :(得分:2)

您可以使用回归来预测。 scikit-learn-linear regression

我假设您有足够的数据来应用机器学习。在列车测试拆分后,您需要将您的列车数据与机器学习模型相匹配,在这种情况下回归。您可以使用regression_model.fit(X_train,y_train)

执行此操作

为了能够预测新点,您可以使用regression_model.predict(X) 在尝试使用这些代码之前,不要忘记创建模型对象。有关详细信息sklearn-linear_model.LinearRegression

如果您想预测此数据集上的这个特定点,我建议您将模型建立为y = ax1 + bx2 + error。你需要找到系数'a'和'b'linear_regression

答案 1 :(得分:0)

之前的评论是正确的,一种方法是使用scikit-learn。它的所有回归类都实现了相同的方法,因此您可以运行一系列回归,如下面的小示例所示(没有列车测试拆分):

import numpy as np
from sklearn.linear_model import LinearRegression, Ridge, BayesianRidge
from sklearn.metrics import mean_squared_error, median_absolute_error

x = [(1, 2), (1, 5), (1, 6), (2, 4), (2, 5), (2, 7), (3, 1), (3, 5), (3, 6)] 
y = [2.3,5.6,9.0,8.6,4.2,13.5,11.0,1.3,5.0]

x = np.array(x)
y = np.array(y)

# collection of regression methods
models = {"OLS":LinearRegression(), 
          "R":Ridge(), 
          "BR":BayesianRidge()}

# collection of metrics for regression
metrics = {"mse":mean_squared_error,
           "mae":median_absolute_error}

# training
for m in sorted(models):
    print("\n",m)
    models[m].fit(x,y)
    # metrics for comparison of regression methods
    for me in sorted(metrics):
        print("metric",me,metrics[me](y, models[m].predict(x)))

修改

然后可以通过以下方式预测新值:

x_new = np.array([[2,3],
                  [3,4]])

for m in sorted(models):
    print("\n",m)
    print(models[m].predict(x_new))

BR [6.7211654 6.7218773]

OLS [6.28459643 6.67948244]

ř [6.29948927 6.66721144]