为了账号安全,请及时绑定邮箱和手机立即绑定

在 sklearn 中为 dictvectorizer 和 Linearsvc 创建管道

在 sklearn 中为 dictvectorizer 和 Linearsvc 创建管道

喵喔喔 2023-07-18 10:23:35
根据我所读到的内容,我需要创建模型并将其保存为管道才能执行此操作。我一直在尝试根据 SO 上的其他示例来执行此操作,但无法使其工作。如何将现有模型转变为流水线版本?第一个代码片段保存,第二个代码片段是我将其放入管道的尝试之一,但我收到“str”对象没有属性“items”错误。我认为这与 to_dict 过程有关,但不知道如何在管道版本中复制它,任何人都可以提供帮助。dframe = pd.read_csv("ner.csv", encoding = "ISO-8859-1", error_bad_lines=False)dframe.dropna(inplace=True)dframe[dframe.isnull().any(axis=1)].size x_df = dframe.drop(['Unnamed: 0', 'sentence_idx', 'tag'], axis=1)vectorizer = DictVectorizer()X = vectorizer.fit_transform(x_df.to_dict("records"))y = dframe.tag.valuesx_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.1, random_state=0)model = LinearSVC(loss="squared_hinge",C=0.5,class_weight='balanced',multi_class='ovr')model.fit(x_train, y_train)dump(model, 'filename.joblib') dframe = pd.read_csv("ner.csv", encoding = "ISO-8859-1", error_bad_lines=False)dframe.dropna(inplace=True)dframe[dframe.isnull().any(axis=1)].size x_df = dframe.drop(['Unnamed: 0', 'sentence_idx', 'tag'], axis=1)y = dframe.tag.valuesx_train, x_test, y_train, y_test = train_test_split(x_df, y, test_size=0.1, random_state=0)pipe = Pipeline([('vectorizer', DictVectorizer(x_df.to_dict("records"))), ('model', LinearSVC)]) pipe.fit(x_train, y_train)
查看完整描述

1 回答

?
慕容708150

TA贡献1831条经验 获得超4个赞

你必须像这样调整你的第二部分:


dframe = pd.read_csv("ner.csv", encoding = "ISO-8859-1", error_bad_lines=False)

dframe.dropna(inplace=True)

dframe[dframe.isnull().any(axis=1)].size 

x_df = dframe.drop(['Unnamed: 0', 'sentence_idx', 'tag'], axis=1)

y = dframe.tag.values


x_train, x_test, y_train, y_test = train_test_split(x_df.to_dict("records"), y, test_size=0.1, random_state=0)


pipe = Pipeline([('vectorizer', DictVectorizer()), ('model', LinearSVC(loss="squared_hinge",C=0.5,class_weight='balanced',multi_class='ovr'))]) 


pipe.fit(x_train, y_train)

您试图DictVectorizer()通过使用在参数中传递您的数据

DictVectorizer(x_df.to_dict("记录"))

但这不起作用。DictVectorizer 的唯一可用参数可以在文档中找到。

第二个错误是您尝试将 DictVectorizer() 与来自 x_df 的数据一起放入管道中

管道.fit(x_train,y_train)

这里的问题是 x_train 数据将提供给您的DictVectorizer(),但 x_train 只是分割 x_df ,并且在您的代码中没有管道的早期,您ictVectorizer()以 的形式向 D 提供了数据x_df.to_dict("records")

因此,您还需要通过管道传递相同类型的数据。这就是为什么我已经将调整后的代码中x_df.to_dict("records")的 与分开train_test_split(),以便矢量化器可以处理它。

最后一件事是,在定义管道时您还忘记了括号LinearSVC()

(“模型”,LinearSVC)


查看完整回答
反对 回复 2023-07-18
  • 1 回答
  • 0 关注
  • 55 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信