简体   繁体   中英

How to fit more complex funtions with sklearn?

I used sklearn in python to fit polynomial functions:

 from sklearn.preprocessing import PolynomialFeatures from sklearn.linear_model import LinearRegression poly = PolynomialFeatures(degree=2, include_bias=False) poly_reg_model = LinearRegression() poly_features = poly.fit_transform(xvalues.reshape(-1, 1)) poly_reg_model.fit(poly_features, y_values) final_predicted = poly_reg_model.predict(poly_features)...

Instead of only using x^n parts, I want to incude a (1-x^2)^(1/2) part in the fit-function. Is this possible with sklearn?

I tried to define a Feature which includes more complex terms but I falied to achieve this.

No idea whether it is possible within scikitlearn - after all polynomial fit is constrained to specific polynomial formulations from the mathematical stanndpoint. If you want to fit a formula with some unknown parameters, you can use scipy.optimize.curve_fit . First let us generate some dummy data with noise:

import numpy as np 
from matplotlib import pyplot as plt

def f(x):
    return (1-x**2)**(1/2)

xvalues = np.linspace(-1, 1, 30)
yvalues = [f(x) + np.random.randint(-10, 10)/100 for x in xvalues]

Then, we set up our function to be optimized:

from scipy.optimize import curve_fit

def f_opt(x, a, b):
    return (a-x**2)**(1/b)

popt, pcov = curve_fit(f_opt, xvalues, yvalues)

You can of course modify this function to be more elastic. Finally we plot the results

plt.scatter(xvalues, yvalues, label='data')
plt.plot(xvalues, f_opt(xvalues, *popt), 'r-', label='fit')
plt.legend()

优化函数的拟合

So now you can use f_opt(new_x, *popt) to predict new points (alternatively you can print the values and hard-code them). popt basically has the parameters that you specify in f_opt except x - for more details check the documentation I've linked!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM