回归就是预测数值,而分类是给数据打上标签归类。
本例中使用一个2次函数加上随机的扰动来生成500个点,然后尝试用1、2、100次方的多项式对该数据进行拟合。
拟合的目的是使得根据训练数据能够拟合出一个多项式函数,这个函数能够很好的拟合现有数据,并且能对未知的数据进行预测。
import matplotlib.pyplot as pltimport numpy as npimport scipy as spfrom scipy.stats import normfrom sklearn.pipeline import Pipelinefrom sklearn.linear_model import LinearRegressionfrom sklearn.preprocessing import PolynomialFeaturesfrom sklearn import linear_model ‘‘‘ 数据生成 ‘‘‘x = np.arange(0, 1, 0.002)y = norm.rvs(0, size=500, scale=0.1)y = y + x**2 ‘‘‘ 均方误差根 ‘‘‘def rmse(y_test, y): return sp.sqrt(sp.mean((y_test - y) ** 2)) ‘‘‘ 与均值相比的优秀程度,介于[0~1]。0表示不如均值。1表示完美预测.这个版本的实现是参考scikit-learn官网文档 ‘‘‘def R2(y_test, y_true): return 1 - ((y_test - y_true)**2).sum() / ((y_true - y_true.mean())**2).sum() ‘‘‘ 这是Conway&White《机器学习使用案例解析》里的版本 ‘‘‘def R22(y_test, y_true): y_mean = np.array(y_true) y_mean[:] = y_mean.mean() return 1 - rmse(y_test, y_true) / rmse(y_mean, y_true) plt.scatter(x, y, s=5)degree = [1,2,100]y_test = []y_test = np.array(y_test) for d in degree: clf = Pipeline([(‘poly‘, PolynomialFeatures(degree=d)),(‘linear‘, LinearRegression(fit_intercept=False))]) clf.fit(x[:, np.newaxis], y) y_test = clf.predict(x[:, np.newaxis]) print(clf.named_steps[‘linear‘].coef_) print(‘rmse=%.2f, R2=%.2f, R22=%.2f, clf.score=%.2f‘% (rmse(y_test, y),R2(y_test, y), R22(y_test, y), clf.score(x[:, np.newaxis], y))) plt.plot(x, y_test, linewidth=2)plt.grid()plt.legend([‘1‘,‘2‘,‘100‘], loc=‘upper left‘)plt.show()
原文出处:https://blog.csdn.net/lsldd/article/details/41251583(转载)
原文地址:https://www.cnblogs.com/heaiping/p/9067977.html
时间: 2024-10-08 12:34:15