Curva de melhor ajuste multivariado (polinomial) em python?

Como você calcula uma linha de melhor ajuste em python e depois plota em um gráfico de dispersão no matplotlib?

Fui eu calcular a linha de melhor ajuste linear usando a Regressão de Mínimos Quadrados Ordinários como segue:

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_      

Isso é multivariado (há muitos valores de x para cada caso). Então, X é uma lista de listas, e y é uma lista única. Por exemplo:

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

Mas como faço isso com funções polinomiais de ordem superior? Por exemplo, não apenas linear (x à potência de M = 1), mas sim binômio (x à potência de M = 2), quadrática (x à potência de M = 4) e assim por diante. Por exemplo, como obter as melhores curvas de ajuste a seguir?

Extraído de "Pattern Recognition and Machine Learning" de Christopher Bishops, p.7:

questionAnswers(1)

yourAnswerToTheQuestion