机器学习,L1正则化。样例代码:
import numpy as np from sklearn.linear_model import Lasso import matplotlib.pyplot as plt from sklearn.metrics import mean_squared_error # 1、创建特征x,目标值y # np.random.seed(22)定义随机数种子 # 生成100个-3到3的随机数列表 # reshape(-1,1),将列表重置1列100行的二维列表(100,1) # hstack将重置后的特征x,再加多一列,这时最终的特征变成了10列 # y是目标值,也有100个 np.random.seed(22) x = np.random.uniform(-3,3,size=100) y = 0.5 * x ** 2 + x + 2 + np.random.normal(0,1,size=100) X = x.reshape(-1,1) X3 = np.hstack([X,X ** 2, X ** 3,X ** 4,X ** 5,X ** 6,X ** 7,X ** 8,X ** 9,X ** 10]) # 2、创建模型,L1正则化。 # alpha惩罚系数,max_iter迭代次数,有时提示ConvergenceWarning: Objective did not converge.没有收敛可以指定迭代次数 model = Lasso(alpha=0.8,max_iter=30000) # 3、训练模型 model.fit(X3,y) # 4、模型预测 y_predict = model.predict(X3) # 5、模型评估,采用mse方法 # coef_可以看到部分特征变成了0.00000000e+00 print(model.coef_) print(mean_squared_error(y_true=y,y_pred=y_predict)) # 6、输出过拟合图 # sort对x排序,argsort是指y按x的排充结果排序 plt.scatter(x,y) plt.plot(np.sort(x),y_predict[np.argsort(x)]) plt.show()