夜与深巷 2022-05-26 18:58 采纳率: 50%
浏览 1650
已结题

关于#takes 1 positional argument but 2 were given #的问题,如何解决?(语言-python)

问题
报错TypeError: init() takes 1 positional argument but 2 positional arguments (and 2 keyword-only arguments) were given,不知道为什么会出现这样的报错

File "E:/py的作业/情感判定.py", line 112, in
commentCls.fit(train_x, train_y, 0.98)
File "E:/py的作业/情感判定.py", line 74, in fit
self.vectorizer = CountVectorizer(max_df, stop_words=stopwords, ngram_range=(1, 3)).fit(list_text)
TypeError: init() takes 1 positional argument but 2 positional arguments (and 2 keyword-only arguments) were given


class CommentClassifier:
    def __init__(self, classifier_type, vector_type):
        self.classifier_type = classifier_type  # 分类器类型:支持向量机或贝叶斯分类
        self.vector_type = vector_type  # 文本向量化模型:0\1模型,TF模型,TF-IDF模型

    def fit(self, train_x, train_y, max_df):

        list_text = list(train_x)

        # 向量化方法:0 - 0/1,1 - TF,2 - TF-IDF
        if self.vector_type == 0:
            self.vectorizer = CountVectorizer(max_df, stop_words=stopwords, ngram_range=(1, 3)).fit(list_text)
        elif self.vector_type == 1:
            self.vectorizer = TfidfVectorizer(max_df, stop_words=stopwords, ngram_range=(1, 3), use_idf=False).fit(list_text)
        else:
            self.vectorizer = TfidfVectorizer(max_df, stop_words=stopwords, ngram_range=(1, 3)).fit(list_text)

        self.array_trainx = self.vectorizer.transform(list_text)
        self.array_trainy = train_y

        # 分类模型选择:1 - SVC,2 - LinearSVC,3 - SGDClassifier,三种SVM模型
        if self.classifier_type == 1:
            self.model = SVC(kernel='linear', gamma=10 ** -5, C=1).fit(self.array_trainx, self.array_trainy)
        elif self.classifier_type == 2:
            self.model = LinearSVC().fit(self.array_trainx, self.array_trainy)
        else:
            self.model = SGDClassifier().fit(self.array_trainx, self.array_trainy)

    def predict_value(self, test_x):
        list_text = list(test_x)
        self.array_testx = self.vectorizer.transform(list_text)
        array_predict = self.model.predict(self.array_testx)
        return array_predict

    def predict_proba(self, test_x):
        list_text = list(test_x)
        self.array_testx = self.vectorizer.transform(list_text)
        array_score = self.model.predict_proba(self.array_testx)
        return array_score

train_x, test_x, train_y, test_y = train_test_split(data_cutted['Comment'].ravel().astype('U'), data_cutted['Class'].ravel(),test_size=0.2, random_state=4)

classifier_list = [1,2,3]
vector_list = [0,1,2]

for classifier_type in classifier_list:
    for vector_type in vector_list:
        commentCls = CommentClassifier(classifier_type, vector_type)
        #max_df 设置为0.98
        commentCls.fit(train_x, train_y, 0.98)
        if classifier_type == 0:
            value_result = commentCls.predict_value(test_x)
            proba_result = commentCls.predict_proba(test_x)
            print(classifier_type,vector_type)
            print('classification report')
            print(metrics.classification_report(test_y, value_result, labels=[-1, 0, 1]))
            print('confusion matrix')
            print(metrics.confusion_matrix(test_y, value_result, labels=[-1, 0, 1]))
        else:
            value_result = commentCls.predict_value(test_x)
            print(classifier_type,vector_type)
            print('classification report')
            print(metrics.classification_report(test_y, value_result, labels=[-1, 0, 1]))
            print('confusion matrix')
            print(metrics.confusion_matrix(test_y, value_result, labels=[-1, 0, 1]))

  • 写回答

2条回答 默认 最新

  • 一切因为有你 2022-05-26 19:44
    关注

    好像是参数位置变了。你题目中13行改成这个试试
    self.vectorizer = CountVectorizer(max_df=max_df, stop_words=stopwords, ngram_range=(1, 3)).fit(list_text)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月3日
  • 已采纳回答 5月26日
  • 修改了问题 5月26日
  • 赞助了问题酬金5元 5月26日
  • 展开全部

悬赏问题

  • ¥15 使用C#,asp.net读取Excel文件并保存到Oracle数据库
  • ¥15 C# datagridview 单元格显示进度及值
  • ¥15 thinkphp6配合social login单点登录问题
  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配