机器学习:L1正则化

机器学习,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()

拟合 

欠拟合与过拟合

L2正则化