【问题标题】:Is it possible to add a covariate (control for a variable of no interest) to an SVM model?是否可以向 SVM 模型添加协变量(对不感兴趣的变量的控制)?
【发布时间】:2023-03-15 03:50:01
【问题描述】:

我对机器学习和 python 非常陌生,我正在尝试建立一个模型来预测患者(N=200)与对照组(N=200)形成结构神经影像数据。在最初的预处理之后,我将神经影像数据重新塑造成一个二维数组,我构建了以下模型:

from sklearn.svm import SVC
svc = SVC(C=1.0, kernel='linear')


from sklearn.grid_search import GridSearchCV
from numpy import range
k_range = np.arange(0.1,10,0.1)
param_grid=dict(C=k_range)
grid=GridSearchCV(svc, param_grid, cv=10, scoring='accuracy')
grid.fit(img,labels)
grid.grid_scores_
print grid.best_score_
print grid.best_params_

这给了我一个不错的结果,但我想控制使用不同扫描仪获取不同图像的事实(例如,使用扫描仪 1 扫描对象 1 到 150,使用扫描仪 2 扫描对象 101 到 300 和受试者 301 到 400 用扫描仪 3) 进行扫描。无论如何这可以添加到上面的模型中吗?

我读到做之前的特征选择可能会有所帮助。但是,当这些特征可能与扫描仪相关时,我不想简单地提取有意义的特征。事实上,我想不基于扫描仪对患者和控制进行分类(即控制扫描仪)。

对此的任何想法将不胜感激, 谢谢你

【问题讨论】:

  • 只是一个注释,参数C的网格应该是日志间隔的。 k_range = np.logspace(-1, 1, 100)
  • 感谢@ZichenWang 的建议,将更新代码。
  • 在我看来,您正在寻找某种形式的规范化,其中扫描仪错误被抽象出来。我不确定这些方法是什么,但也许更广泛的术语可能会有所帮助。
  • 感谢@JuanCarlosCoto 我会阅读更多关于标准化及其工作原理的内容。

标签: python machine-learning scikit-learn svm


【解决方案1】:

对于诊断,您可以查看每个扫描仪的数据分布情况,看看您所追求的方向是否有希望。正如有人已经建议的那样,标准化(例如,每个扫描仪的平均值+方差)可以是一种选择。另一种选择是向您的功能集添加 3 个额外的维度,作为所用扫描仪的单热编码(即,对于每个示例,您在相应扫描仪的位置有一个 1,而在其他扫描仪的位置有一个 0)

【讨论】:

  • 谢谢,这很有用。我非常喜欢你提到的最后一个选项。我一定会放弃的。
【解决方案2】:

要将其添加到您的模型中,您可以将每个扫描仪的标准化参数作为一个特征,并将其包含在您的模型中。

【讨论】:

  • 把你的答案解释清楚
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-24
  • 2017-09-17
  • 1970-01-01
相关资源
最近更新 更多