基于sklearn的岭回归

Posted

技术标签:

【中文标题】基于sklearn的岭回归【英文标题】:Ridge Regression Based on sklearn 【发布时间】:2022-01-20 19:47:04 【问题描述】:

基于 Numpy,创建数据 x 并标注 y 来训练岭回归模型,然后使用另一个创建的 x 和 y 来预测回归。正确预测的百分比仅为 14/64。我不知道问题出在哪里。下面是我的代码。

import numpy as np
from sklearn.preprocessing import OneHotEncoder
from sklearn.linear_model import Ridge

one_hot = OneHotEncoder(sparse=False)

x = np.random.rand(64,40) * 2 - 1
y = np.random.randint(0,5,(64,))
y = one_hot.fit_transform(y.reshape(-1,1))
clf = Ridge(alpha=1.0)
readout = clf.fit(x,y)

a = np.random.rand(64,40) * 2 - 1
b = np.random.randint(0,5,(64,))
b = one_hot.fit_transform(b.reshape(-1,1))
y_hat = readout.predict(a)
y_hat = np.argmax(y_hat,axis=1)
target = np.argmax(b,axis=1)
correct = (y_hat == target).sum()

print(correct)     # 14

【问题讨论】:

回归问题几乎永远不会预测出完全正确的值。这就是分类问题的业务。你想做什么? 我目前正在使用回波状态网络对心电数据进行分类,回波状态网络的权重参数需要通过岭回归法求解。 【参考方案1】:

为了使回归起作用,一个基本假设是,X 应该有能力预测 y

在您的情况下,Xy 都是随机生成的

x = np.random.rand(64,40) * 2 - 1
y = np.random.randint(0,5,(64,))

因此X确实有任何预测能力。在这种情况下,任何回归或更高级的机器学习模型都只能产生随机猜测,而这正是你得到的。根据y = np.random.randint(0,5,(64,))y 在区间[0, 5) 中是随机的,因此对于随机猜测,您有20% 的机会得到正确答案,而14/64=0.21875 就是这样。

【讨论】:

以上是关于基于sklearn的岭回归的主要内容,如果未能解决你的问题,请参考以下文章

使用插入符号的岭逻辑回归系数的标准误差

拓端tecdat|R语言Bootstrap的岭回归和自适应LASSO回归可视化

偏最小二乘法的岭回归分析

sklearn之岭回归

机器学习实战---线性回归提高篇之乐高玩具套件二手价预测

为岭回归训练 alpha 值