基于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。
在您的情况下,X 和 y 都是随机生成的
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的岭回归的主要内容,如果未能解决你的问题,请参考以下文章