今天是生信星球陪你的第999天
公众号里的文章大多数需要编程基础,如果因为代码看不懂,而跟不上正文的节奏,可以来找我学习,相当于给自己一个新手保护期。我的课程都是循环开课,点进去咨询微信↓
生信分析直播课程(每月初开一期,春节休一个月)
生信新手保护学习小组(每月两期)
单细胞陪伴学习小组(每月两期)
1.线性回归为什么需要正则化
线性回归选择模型时,会最小化损失函数,在前面有学到过。 它为每个特征选择一个系数a,加上b 如果某些特征的系数太大,可能会导致模型在训练数据上表现得很好,但在新的、未见过的数据上表现不佳,也就是过拟合。 正则化会惩罚大的系数,避免过拟合。
2.岭回归(Ridge Regression)
岭回归的损失函数
最小二乘法损失函数 + α系数平方之和,能对绝对值较大的系数进行惩罚。
超参数α
超参数是机器学习和深度学习模型中的一类参数,不同于模型的权重和偏差(模型参数),用于控制模型训练过程的配置参数。例如,学习率、迭代次数、正则化参数、隐藏层的神经元数量等都是常见的超参数
α 是我们需要提前设置的参数,选择α类似于在KNN中选择k。
α控制着模型的复杂程度,控制着正则化项的强度
α=0 =最小二乘法,会导致过拟合 α非常高,则会导致欠拟合
from sklearn.linear_model import Ridge
scores = []
for alpha in [0.1, 1.0, 10.0, 100.0, 1000.0]:
ridge = Ridge(alpha=alpha)
ridge.fit(X_train, y_train)
y_pred = ridge.predict(X_test)
scores.append(ridge.score(X_test, y_test))
print(scores)
## [0.35378781259988534, 0.3536407299494275, 0.35124269586139323, 0.3110510827436761, 0.22518335310369975]
通过迭代不同的α值,我们可以选择一个在测试集上表现最好的α值。
这里的分数是回归模型的R方,还是很低的。datacamp课上的例子就是这样,没有动他。
3.lasso回归(Lasso Regression)
损失函数
最小二乘法损失函数 + α系数绝对值之和 ,可以对绝对值较大的系数进行惩罚。
from sklearn.linear_model import Lasso
scores = []
for alpha in [0.01, 1.0, 10.0, 20.0, 50.0]:
lasso = Lasso(alpha=alpha)
lasso.fit(X_train, y_train)
lasso_pred = lasso.predict(X_test)
scores.append(lasso.score(X_test, y_test))
print(scores)
## [0.3538284414885491, 0.3438049456776031, 0.19833321142742266, 0.18342320274518353, 0.14538765319821045]
lasso 回归可以用于特征选择
lasso回归可以选择数据集中的重要变量,将不太重要的特征的系数缩小到0,系数不为0的特征就是被lasso回归选择的特征
from sklearn.linear_model import Lasso
X = diabetes_df.drop("glucose", axis=1).values
y = diabetes_df["glucose"].values
names = diabetes_df.drop("glucose", axis=1).columns
lasso = Lasso(alpha=0.1)
lasso_coef = lasso.fit(X, y).coef_
print(lasso_coef)
## [-0.50126721 0.11675071 -0.24056526 0.08327346 0.36416028 0.
## 0.47433655 25.33535427]
系数可视化
plt.bar(names, lasso_coef)
plt.xticks(rotation=45)
plt.show()