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

在自定义类中使用列测试分割时的类型错误(单例数组…)

陶鸿畴
2023-03-14

TypeError:单例数组(

当我试图在我的自定义AZHU_EmailClassifier_2类中运行train_test_split函数时,我遇到了这个错误。

我的班级:

class AZHU_EmailClassifier_2:
    import os
    import numpy as np
    import pandas as pd
    from sklearn.model_selection import train_test_split

    def __init__(self):
        pass
    
    def retrain_model(self, csv_file):
        
        MIN_ROW_NUMBER = 500
        TEST_SIZE = 0.25
        RANDOM_STATE = 42
        
        self.os.chdir(r"c:\LORI\PROJECTS\ALLIANZ\INCOMING_CHANNELS") # <---- a retraining file mappaja
        
        df=self.pd.read_excel(csv_file,error_bad_lines=False, header=None)
        
        df.dropna(axis=0,how='any', inplace=True)
             
        rows_no=df.shape[0]
        if rows_no<MIN_ROW_NUMBER:
            print("Insufficient number of rows (<35.000)! RETRAINING ABORTED")
            return None

        X=df[0]
        y=df[1]
        
        X_train, X_test, y_train, y_test=self.train_test_split(X,y)
        #X_train, X_test, y_train, y_test=self.train_test_split(X,y,test_size=TEST_SIZE, random_state=RANDOM_STATE, stratify=y)
        
        return X_train
                

当我运行train_test_split函数时,会触发错误。

整个错误消息:

--------------------------------------------------------------------------- TypeError Traceback(最近的调用最后)在1实例=AZHU_EmailClassifier_2()2----

在再培训模型中(自我,csv文件)28 y=df[1]29---

~\Anaconda3\lib\site packages\sklearn\model\u selection\u split.py in train\u test\u split(*数组,**选项)2125 raise TypeError(“传递的无效参数:%s”%str(选项))2126-

~\Anaconda3\lib\site packages\sklearn\utils\validation.py in indexable(*iterables)291''“292 result=[\u使iterables中的X可索引(X)]--

~\Anaconda3\lib\site-包\skLearning\utils\validation.pycheck_consistent_length(*数组)251""252--

(.0)251“”252中的~\Anaconda3\lib\site packages\sklearn\utils\validation.py--

~\Anaconda3\lib\site-包\skLearning\utils\validation.py在_num_samples(x)194如果hasattr(x,'形状')和x.shape不是无:195如果len(x.shape)==0:--

TypeError:单例数组(

我不知道为什么它抛出这个错误。你能给我指出正确的方向吗?任何帮助都很感激!

共有1个答案

公冶昆杰
2023-03-14

出现此错误是因为您在类内导入了train\u test\u split,因此,train\u test\u split成为绑定方法而不是函数,并且每当调用该方法时,实例将作为第一个参数传递。下面是一个可以重建情况的最小示例

class test():
    
    from sklearn.model_selection import train_test_split
    
    def retrain_model(self):
        print(self.train_test_split)
        print(self.train_test_split())
    
test_instance = test()
test_instance.retrain_model()

运行此脚本后,您将得到一个TypeError

TypeError: Singleton array array(<__main__.test object at 0x7ffa473ae438>, dtype=object) cannot be considered a valid collection.

self.train_test_split在内存中的位置也是0x7ffa473ae438

根据PEP8的说法

导入总是放在文件的顶部,就在任何模块注释和docstring之后,模块全局和常量之前。

因此,最简单的解决方案是导入类外的所有内容,直接调用train_test_split

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split

class AZHU_EmailClassifier_2():

    def __init__(self):
        pass
    
    def retrain_model(self,):
        
        MIN_ROW_NUMBER = 20
        TEST_SIZE = 0.25
        RANDOM_STATE = 42
                
        df = pd.DataFrame({0:np.linspace(1,100,100),1:np.random.rand(100)})
        X=df[0];y=df[1]
        X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=TEST_SIZE,random_state=RANDOM_STATE)
        
        return X_train

test = AZHU_EmailClassifier_2()
test.retrain_model()
 类似资料:
  • TypeError:单个数组数组(<__Main__.Azhu_EmailClassifier_2对象位于0x000001D6E7A680D0>,DType=object)不能视为有效集合。 当我试图在自定义的AZHU_EmailClassifier_2类中运行train_test_split函数时,我遇到了这个错误。 我的班级: ~\Anaconda3\lib\site-packages\skl

  • 本文向大家介绍Rust 自定义错误类型,包括了Rust 自定义错误类型的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 查找有关在 Pyspark 中使用自定义分区程序的一些信息。我有一个数据帧,其中包含各个国家/地区的国家/地区数据。因此,如果我在国家/地区列上重新分区,它会将我的数据分发到 n 个分区中,并将类似的国家/地区数据保留到特定分区。当我看到使用 方法时,这是创建一个倾斜分区数据。 一些国家,如美国和中国,在特定的数据帧中拥有大量数据。我想重新分区我的数据帧,这样如果国家是美国和中国,那么它将进一步拆

  • 我使用的是自定义类型Vector的线程安全队列。它显示以下错误。我不确定我在这里错过了什么。 错误C2664“std::vector>::vector(std::vector<_ty,std::allocator<_ty>>&&,constalloc&)noexcept()”:无法将参数2从“int”转换为“const std::allocator<_ty>&”。

  • 问题内容: 我有一堂课: 我想在“ JPA”专栏中使用它: 这就是Hibernate所说的: 如何使其了解我的自定义类型。我认为这很简单,但是在文档中找不到。 问题答案: 好吧,有很多方法: 用注释类,并具有: private Email email; 声明自定义值类型-参见此处(使用)

  • 以下代码不能按预期工作。显然,我不能在类定义中使用类自己的类型: 运行它的结果是: 此外,使用检查代码会返回: 如何将此代码更正为对Python和mypy有效?