当前位置: 首页 > 知识库问答 >
问题:

为什么scikit-Learning对不同的回归器要求不同的数据形状?

凤衡
2023-03-14

我总是发现自己在使用sklearn时会重塑我的数据,这很烦人,让我的代码变得丑陋。为什么不能使库能够处理各种数据形状并进行适当的解释?例如,要使用线性回归量,我需要做

from sklearn.linear_model import LinearRegression
x = np.random.rand(10).reshape(-1,1)
y = np.random.rand(10).reshape(-1,1)
regr = LinearRegression()
regr.fit(x,y)

但是如果我想使用支持向量回归器,那么我不会重塑自变量:

from sklearn.svm import SVR
x = np.random.rand(10).reshape(-1,1)
y = np.random.rand(10)
regr = SVR()
regr.fit(x,y)

我想图书馆以这种方式设计是有原因的。任何人都可以照亮我吗?

共有1个答案

班昱
2023-03-14

当你做 y = np.random.rand(10)时,y 是 [10,] 的一维数组。它是行向量还是列向量并不重要。它只是一个只有一个维度的向量。看看这个答案,也要了解它背后的哲学。

这是“无聊哲学”的一部分。sklearn依赖于numpy。

至于你的评论

为什么sklearn不能自动理解,如果我传递给它n_samples=n和n_features=1的形状(n,)

sklearn可能无法仅基于X数据推断其n_samples=n和n_features=1或其他方式(n_samples=1和n_features=n)。如果通过了y,则可以执行此操作,这可以清楚了解n_samples

但这意味着改变所有依赖于这种语义学的代码,这可能会破坏许多东西,因为skLearning严重依赖于numpy操作。

您可能还想查看以下讨论类似问题的链接。

  • https://github.com/scikit-learn/scikit-learn/issues/4509
  • https://github.com/scikit-learn/scikit-learn/issues/4512
  • https://github.com/scikit-learn/scikit-learn/issues/4466
  • https://github.com/scikit-learn/scikit-learn/pull/5152

 类似资料:
  • 问题内容: 在使用时,我总是发现自己在重塑数据,这很烦人并且使我的代码很难看。为什么不能使库能够处理各种数据形状并进行适当的解释?例如,要使用线性回归器,我需要 但是,如果我想使用支持向量回归器,则无需重塑自变量: 我认为以这种方式设计库是有原因的。谁能照亮我? 问题答案: 当你这样做,y是 一个维数组 中。它是行向量还是列向量都没有关系。它只是一个只有一个维度的向量。 它是“ numpy哲学 ”

  • 我正在使用Microsoft Graph Users API根据我们的ActiveDirectory验证用户名或电子邮件地址列表。名称搜索: https://graph.microsoft.com/v1.0/me/people/?$search=John.Smith 返回其他数据,如和。但如果我使用电子邮件搜索: null 我是否需要额外的权限来获取相同的数据? 更新:我按照下面的建议在https

  • 问题内容: 我运行了跟随脚本(java),它给了我奇怪的结果。有人可以帮忙解释吗? 记录结果(彼此不同): - - 背景 - - 我想将自己的keyGenrator用于@Cacheable批注(Spring和ehCache)。 在这种情况下,我发现缓存总是丢失的。 然后,我必须更改为: 谢谢 问题答案: 这是因为for 不会被覆盖。即使条目相同,也没有理由为什么的两个实例应该具有相同的值。 试试这

  • 问题内容: 我正在阅读Head First Java的书中的一句话: 关键是哈希码可以相同,而不必保证对象相等,因为该方法中使用的“哈希算法” 可能会为多个对象返回相同的值。 为什么该方法可能为不同的对象返回相同的值?这不会引起问题吗? 问题答案: *对对象进行 *散列 意味着“ 找到可以由相同实例一次又一次地再现的良好的描述性值(数字) ”。由于Java的哈希码类型为,因此只能具有不同的值。这就

  • } 我得到了下面的结果。但是在这个结果中,高亮显示的行具有相同的列名,但是别名不同。为什么hibernate会得到相同的Cloumn? 冬眠:删除表,如果存在hibernate_sequence hibernate:删除表(如果存在)UserDetails Hibernate:如果存在,则删除表车辆Hibernate:创建表hibernate_sequence(next_val bigint)En

  • 问题内容: 我以为运算符检查对象的相等性。但事实并非如此: 问题答案: *Python *将相同的内存 位置用于方法和,这是*两个对象,它们的生命周期不重叠,因此对它们返回相同的标识。请参阅下面的详细说明。 从is运算符的文档中: 运算符是否测试对象标识:并且仅当x和y是同一对象时,x is y才是true。 从ID的文档中 返回对象的“身份”。这是一个整数(或长整数),在此对象的生存期内,此整数