我試圖為多標簽分類定義一組類/標簽,其中包括類1,2,3和4,但在陣列中意外地還包括以下問題:
multilabel.classes_ array([' ', ', ', '1', '2', '3', '4'], dtype=object)
我只想讓1,2,3,4作為我的標簽,但我不知道有什么方法可以移除這個。
我的代碼:
import pandas as pd
import numpy as np
import os
import ast
import seaborn as sns #pip install seaborn
import matplotlib.pyplot as plt
import skmultilearn #pip install scikit-multilearn
from preprocessing.transcription_preprocessing import TranscriptionPreprocessor
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MultiLabelBinarizer
from sklearn.preprocessing import LabelBinarizer
from sklearn.linear_model import SGDClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.svm import LinearSVC
from sklearn.multiclass import OneVsRestClassifier
df = pd.read_csv(r'C:UsersM94969Desktopdatasetsprod500.csv'/span>)
# 定義標簽變數'tags']
# Make multilabelbinarizer object
#multilabel = MultiLabelBinarizer()/span>
#y = multilabel.fit_transform(y)
#multilabel.classes_
#pd.DataFrame(y,columns=multilabel.classes_)
labelbinarizer = LabelBinarizer()
fit = labelbinarizer.fit_transform(y)
labelbinarizer.classes_
pd.DataFrame(y,columns=labelbinarizer.classes_)
# 將文本變成稀疏矩陣。
tfidf = TfidfVectorizer(analyzer='word'/span>, max_features=1000, max_df=0. 50, ngram_range=(1,3)
X = tfidf.fit_transform(df['text'] )
tfidf.vocabulary_
# 將資料分成訓練/測驗。
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1)
# 建立模型。
sgd = SGDClassifier()
lr = LogisticRegression(solver = 'lbfgs')
svc = LinearSVC()
def j_score(y_true, y_pred)。
jaccard = np.minimum(y_true, y_pred).sum(axis=1)/np. maximum(y_true, y_pred).sum(axis = 1)
return jaccard.mean()*100。
def print_score(y_pred, clf)。
print("Clf: ", clf.__class__.__name__)
print('Jacard score: {}'.format(j_score(y_test,y_pred) >)
print('----')
for classifier in [sgd, lr, svc]:
clf = OneVsRestClassifier(分類器)
clf.fit(X_train,y_train)
y_pred = clf.pred(X_test)
print_score(y_pred, classifier)
鏈接到資料的子集。 https://www.filemail.com/d/whkmmsazgrwzfdp
uj5u.com熱心網友回復:
當你運行時:
df['tags'/span>].unique()
在你的樣本資料上,輸出結果如下:
array(['1', '3', '2', '1, 2'], dtype=object)
多標簽分配發生在你的資料框架的第7行:
df[df['tags']=='1, 2']
結果是:
text TV Internet Mobil Fastnet tags
7 TIL YOUSEE... 1 2 0 0 1, 2
如果你不希望這個二進制化,你可以簡單地洗掉該行或在你的資料框架中指定一個單一的標簽。
另外,您可以查看 sklearn LabelBinarizer,以獲得更符合您所尋找的標簽:
labelbinarizer = LabelBinarizer()
fit = labelbinarizer.fit_transform(y)
labelbinarizer.classes_
# array(['1', '1, 2', '2', '3'], dtype='<U4')/span>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/307656.html
標籤:
上一篇:按計算熊貓分組
