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

在自定义类中使用train_test_split时使用Typerror(单例数组…)

何宏博
2023-03-14

TypeError:单个数组数组(<__Main__.Azhu_EmailClassifier_2对象位于0x000001D6E7A680D0>,DType=object)不能视为有效集合。

当我试图在自定义的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
                

~\Anaconda3\lib\site-packages\sklearn\utils\validation.py in indexable(*iterables)291“”“292 result=[_make_indexable(X)for X in iterables]-->293 check_consistent_length(*result)294返回结果295

~\Anaconda3\lib\site-packages\sklearn\utils\validation.py in check_consistent_length(*arrays)251“”“252-->253 lengths=[_num_samples(X)for X in arrays(如果X不是None)]254 uniques=np.unique(长度)255如果len(uniques)>1:

~\Anaconda3\lib\site-packages\sklearn\utils\validation.py in(.0)251“”252-->253长度=[_num_samples(X)for X in arrays(如果X不是None)]254 uniques=np.unique(长度)255如果len(uniques)>1:

~\Anaconda3\lib\site-packages\sklearn\utils\validation.py in_num_samples(x)194如果hasattr(x,'shape')和x.shape不是none:195如果len(x.shape)==0:-->196引发TypeError(“单例数组%r不能视为”197“有效集合。”%x)198#检查shape是否返回整数或默认值

TypeError:单个数组数组( ,DType=object)不能视为有效集合。

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

共有1个答案

周洋
2023-03-14

出现此错误是因为在类内部导入了train_test_split,因此,train_test_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

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:单例数组( 当我试图在我的自定义AZHU_EmailClassifier_2类中运行train_test_split函数时,我遇到了这个错误。 我的班级: 当我运行train_test_split函数时,会触发错误。 整个错误消息: -------------------------------------------------------------------------

  • 我正在编写一个代码,它取两个点,确定两个点的大小,比较它们,并返回哪个更大。我有我的主类和方法来运行所有的东西,然后还有另一个类点来实现我的接口。但是,我无法使从接口调用的方法正常工作。我的代码是: 当我尝试运行它时,我得到错误“exception in thread”main“java.lang.nullPointerException:不能调用”point.getMetality()“,因为”

  • 问题内容: 我试图将对象存储在redis中,redis是类的实例,因此具有功能,这是一个示例: 有没有一种方法可以将对象与函数一起存储在Redis中?我尝试过,但是只保留了属性。如何存储函数定义并能够执行以下操作: 打电话时如何获得? 先感谢您! 编辑 得到了修改MyClass.prototype并存储值的建议,但是类似这样的事情(setter / getter以外的功能)呢? 我正在尝试说明一个

  • 本章节中,简述自定义类的创建和使用方法,供参考。 创建自定义类 用户可以定义自己的类,通过继承 ThingJS 内部类(比如:Thing 类),对 ThingJS 进行扩展和封装。 我们推荐使用 ES6 语法定义一个类。例如,自定义汽车类 Car。 // 继承 Thing 类 class Car extends THING.Thing { constructor(app) { super(

  • 问题内容: 是否可以为javac(或某些替代的Java编译器)指定自定义类加载器? 我很喜欢这种壮举,因为它可以让我编译使用仅由我的特殊类加载器找到的类的类。 对于那些好奇的人:我将编写一个连接数据库的classloder,并根据找到的表创建类。 问题答案: 运行javac时,您可以像这样指定类加载器:

  • 问题内容: 假设我有一个文件一个简单的Python类定义myClass.py 而且我也有两个测试脚本。所述第一脚本创建类型测试的目的,填充阵列A,和泡菜的结果到一个文件。它立即从文件unpickles它并仍在填充阵列。第二脚本刚刚从文件unpickles,和 未填充的阵列(即A == [])。 为什么是这样? test1.py 和test2.py 问题答案: 这是因为你设置的一类属性,而不是一个实