【问题标题】:Gaussian NB fit() function expects fixed length vectorsGaussian NB fit() 函数需要固定长度的向量
【发布时间】:2018-01-14 10:36:00
【问题描述】:

我正在尝试实施这样的高斯 NB 训练。但是,如果 X 的维度不相等(即 X 中的所有列表必须具有相同的长度),则 gnb.fit() 会引发异常。如果我的训练样本是不同长度的向量,那么调用 fit() 的正确方法是什么?

 def train(X, Y):
   gnb = GaussianNB()
   gnb.fit(X, Y)
   return gnb

 >>> X = [[1,2,3], [4,5,6,7], [8,9]]
 >>> Y = [1,1,1]
 >>> snb.train(X, Y)

 /Library/Python/2.7/site-packages/sklearn/utils/validation.py:395: 
 DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17 
 and will raise ValueError in 0.19. Reshape your data either using 
 X.reshape(-1, 1) if your data has a single feature or X.reshape(1, -1) 
 if it contains a single sample.
 DeprecationWarning)
 Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "snb.py", line 113, in train
 gnb.fit(X, Y)
 File "/Library/Python/2.7/site-packages/sklearn/naive_bayes.py", line 
 182, in fit
 X, y = check_X_y(X, y)
 File "/Library/Python/2.7/site-packages/sklearn/utils/validation.py", 
 line 521, in check_X_y
 ensure_min_features, warn_on_dtype, estimator)
 File "/Library/Python/2.7/site-packages/sklearn/utils/validation.py", 
 line 402, in check_array
 array = array.astype(np.float64)
 ValueError: setting an array element with a sequence.

【问题讨论】:

    标签: python scikit-learn naivebayes


    【解决方案1】:

    这是因为列表X 中的列表长度不同。 X 的子列表充当行/示例,并且该列表中的每个元素都是一个特征。为了确保您的模型运行,您需要具有相同长度的子列表,否则它将无法工作。我改变了那部分,代码就可以工作了。

    def train(X, Y):
        gnb = GaussianNB()
        gnb.fit(X, Y)
        return gnb
    
    X = [[1,2,3,4], [4,5,6,7], [8,9,10,11]]
    Y = [1,1,1]
    train(X, Y)
    

    【讨论】:

      【解决方案2】:

      所有 X 向量必须长度相同。高斯朴素贝叶斯估计器旨在基于一组因素进行预测。如果每个 X 中都有一个变量号,分类器如何判断哪个元素属于哪个因子?

      一种选择是用 0 值填充 X 向量,以确保它们的长度相同。否则你需要考虑你的变量预处理。

      【讨论】:

        猜你喜欢
        • 2012-08-26
        • 1970-01-01
        • 2023-04-08
        • 1970-01-01
        • 1970-01-01
        • 2015-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多