【问题标题】:How to make multiclass classification with condition如何根据条件进行多类分类
【发布时间】:2022-01-24 04:13:06
【问题描述】:

我的 .csv 文件如下所示:

comment toxicity
"toxic comment" 0,6232
"clean comment" 0
"another toxic comment" 1

如果“毒性”值接近“1”,则表示评论非常有毒。

我想用这个条件做多类分类; toxicity=0toxicity!=0 但我找不到如何将此条件应用于分类。

我做了类似的事情:

x= df.iloc[:,:-1].values
y=df.iloc[:,1].values
le = preprocessing.LabelEncoder()
x = le.fit_transform(x)
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2)
clf = KNeighborsClassifier(n_neighbors=3,algorithm='ball_tree')
clf.fit(x_train,y_train)
y_pred3 = clf.predict(x_test)
acc3 = accuracy_score(y_test,y_pred3)
 

但是我收到了这个错误;

Traceback(最近一次调用最后一次):

文件“C:\Users\hayyi.spyder-py3\temp.py”,第 123 行,在 clf.fit(x_train,y_train)

文件 "D:\SpyderUI\MiniConda\envs\spyder-env\lib\site-packages\sklearn\neighbors_classification.py", 第 198 行,合适 返回 self._fit(X, y)

文件 "D:\SpyderUI\MiniConda\envs\spyder-env\lib\site-packages\sklearn\neighbors_base.py", 第 400 行,在 _fit X, y = self._validate_data(X, y, accept_sparse="csr", multi_output=True)

文件 "D:\SpyderUI\MiniConda\envs\spyder-env\lib\site-packages\sklearn\base.py", 第 576 行,在 _validate_data 中 X, y = check_X_y(X, y, **check_params)

文件 "D:\SpyderUI\MiniConda\envs\spyder-env\lib\site-packages\sklearn\utils\validation.py", 第 956 行,在 check_X_y X = check_array(

文件 "D:\SpyderUI\MiniConda\envs\spyder-env\lib\site-packages\sklearn\utils\validation.py", 第 761 行,在 check_array 中 引发 ValueError(

ValueError:预期的 2D 数组,得到 1D 数组:array=[1356040 918709 372428 ... 719104 1170089 1856713]。重塑您的数据 如果您的数据具有单个特征,则使用 array.reshape(-1, 1) 或 array.reshape(1, -1) 如果它包含单个样本。

然后我尝试对这样的拆分数据进行线性回归;

reg = LinearRegression()
reg.fit(X_train,Y_train)
predict_test = reg.predict(X_test)
plt.scatter(X_train,Y_train)
plt.plot(X_train,predict_test, color='red')

问题 1 如何在 toxicity=0toxicity!=0 条件下进行多类分类?

问题 2 我的线性回归代码错了吗?我打印了回归表,但似乎非常错误。

【问题讨论】:

    标签: python dataframe scikit-learn multiclass-classification


    【解决方案1】:

    根据您的问题,我知道您想要进行二进制分类,因此您必须将输出变量转换为二进制类,例如毒性值为 0 时保持为 0 即无毒,以及其他值大于 0 将其转换为 1 即有毒。

    df['output'] = df['toxicity'].apply(lambda x: 0 if x == 0 else 1)
    

    另外,您需要将第一列转换为数值,否则算法将无法处理此数据

    【讨论】:

    • 感谢您的回答。我正在使用标签编码器将第一列转换为数值。这是正确的吗?你能帮我解释一下为什么 KNN 代码会出现这个错误吗?
    猜你喜欢
    • 2019-02-23
    • 2021-08-29
    • 1970-01-01
    • 2014-08-21
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多