本文共 1193 字,大约阅读时间需要 3 分钟。
线性回归:
from sklearn.linear_model import LinearRegressionlr = LinearRegression(fit_intercept=True)lr.fit(x, y)p = map(lr.predict, x)e = p - ytotal_error = np.sum(e*e)rmse_train = np.sqrt(total_error / len(p))
交叉验证:
from sklearn.cross_validation import Kfoldkf = Kfold(len(x), n_folds=10)err = 0for train, test in kf: lr.fit(x[train], y[train]) p = map(lr.predict, x[test]) e = p - y[test] err += np.sum(e*e)rmse_10cv = np.sqrt(err/len(x))
普通的最小二乘法学习时间非常短:
假设以平方差为损失函数,则优化目标为:
L1惩罚:通过系数的绝对值之和对回归进行惩罚。
L2惩罚:通过系数的平方和对回归进行惩罚。
L1范数和L2范数都有助于降低过拟合风险,但前者还会代来一个额外的好处:它比厚泽更易获得“稀疏”(sparse)解,即它求得的w会有更少的非零向量。
有两个惩罚项,结合了L1惩罚和L2惩罚。
from sklearn.linear_model import ElasticNeten = ElasticNet(fit_intercept=True, alpha=0.5)
《Building Machine Learning Systems with Python》 P113