Вопрос по machine-learning, scatter-plot, regression, matplotlib, python – Многомерная (полиномиальная) кривая наилучшего соответствия в питоне?

18

Как рассчитать линию наилучшего соответствия в python, а затем вывести ее на диаграмму рассеяния в matplotlib?

Я вычислил линейную линию наилучшего соответствия, используя Регрессию наименьших квадратов, следующим образом:

from sklearn import linear_model
clf = linear_model.LinearRegression()
x = [[t.x1,t.x2,t.x3,t.x4,t.x5] for t in self.trainingTexts]
y = [t.human_rating for t in self.trainingTexts]
clf.fit(x,y)
regress_coefs = clf.coef_
regress_intercept = clf.intercept_      

Это многовариантно (для каждого случая есть много значений x). Итак, X - это список списков, а y - это один список. Например:

x = [[1,2,3,4,5], [2,2,4,4,5], [2,2,4,4,1]] 
y = [1,2,3,4,5]

Но как мне сделать это с полиномиальными функциями более высокого порядка. Например, не просто линейные (x в степени M = 1), но биномиальные (x в степени M = 2), квадратичные (x в степени M = 4) и так далее. Например, как получить наилучшие кривые соответствия из следующих?

Extracted from Christopher Bishops's "Pattern Recognition and Machine Learning", p.7:

Extracted from Christopher Bishops's "Pattern Recognition and Machine Learning", p.7

Вы хотите сгенерировать формулу для каждого набора X или сгенерировать формулу для всех? mattexx
Регрессия по методу наименьших квадратов по-прежнему линейна, даже если вы подходите для многочлена. Пока уравнение представляет собой линейную комбинацию членов (например, многочлена), работает один и тот же алгоритм. Dietrich Epp
Связанные с:Multi-variate polynomial regression with numpy jozzas
Связанные с:Multi-variate regression using numpy jozzas

Ваш Ответ

1   ответ
24

Принятый ответ наэтот вопрос обеспечиваетнебольшая многогранная библиотека который будет делать именно то, что вам нужно, используя NumPy, и вы можете вставить результат в график, как я обрисовал в общих чертах ниже.

Вы просто передали бы свои массивы точек x и y и степень (порядок) соответствия, которая вам требуется вmultipolyfit, Это возвращает коэффициенты, которые затем можно использовать для построения графиков с использованием полувывода numpy.

Note: В приведенный ниже код были внесены поправки для многофакторной подгонки, но изображение графика было частью более раннего, не многовариантного ответа.

import numpy
import matplotlib.pyplot as plt
import multipolyfit as mpf

data = [[1,1],[4,3],[8,3],[11,4],[10,7],[15,11],[16,12]]
x, y = zip(*data)
plt.plot(x, y, 'kx')

stacked_x = numpy.array([x,x+1,x-1])
coeffs = mpf(stacked_x, y, deg) 
x2 = numpy.arange(min(x)-1, max(x)+1, .01) #use more points for a smoother plot
y2 = numpy.polyval(coeffs, x2) #Evaluates the polynomial for each x2 value
plt.plot(x2, y2, label="deg=3")

enter image description here

Note: Это было частью ответа ранее, это все еще актуально, если у вас нет многомерных данных. Вместоcoeffs = mpf(...использоватьcoeffs = numpy.polyfit(x,y,3)

Для не многовариантных наборов данных самый простой способ сделать это, вероятно, с помощью numpy 'spolyfit:

numpy.polyfit(x, y, deg, rcond=None, full=False, w=None, cov=False)

Least squares polynomial fit.

Fit a polynomial p(x) = p[0] * x**deg + ... + p[deg] of degree deg to points (x, y). Returns a vector of coefficients p that minimises the squared error.

@jozzas Ах, спасибо большое!
@jozzas Где находится модульmultipolyfit родом из? Попытка импортировать приводит к ошибке импорта:ImportError: No module named multipolyfit.multipolyfit ...
Спасибо за хороший ответ со ссылками. Zach
Как это относится к многомерной регрессии? Поскольку у меня несколько переменных x (по 5 для каждого случая), у меня есть двумерный массив (список списков) для x. Мой х выглядит так:[[1,2,3,4,5],[2,3,4,5,6],..], Вводя это в ваш ответ, я получаюTypeError: expected 1D vector for x. Zach
Я только заметил этот вопрос. Я обновил организацию репо, добавил разрешительную лицензию с открытым исходным кодом и опубликовал ее на PyPi. Вы должны быть в состоянии easy_install multipolyfit.

Похожие вопросы