我项目的目标是预测一些文本描述的准确度水平。
我使用FASTTEXT创建向量。
TSV输出:
0 1:0.0033524514 2:-0.021896651 3:0.05087798 4:0.0072637126 ...
1 1:0.003118149 2:-0.015105667 3:0.040879637 4:0.000539902 ...
资源被标记为好(1)或坏(0)。
为了检查准确性,我使用了scikit-learn和SVM。
按照这个教程,我编写了以下脚本:
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn import svm
from sklearn import metrics
import numpy as np
import matplotlib.pyplot as plt
r_filenameTSV = 'TSV/A19784.tsv'
tsv_read = pd.read_csv(r_filenameTSV, sep='\t',names=["vector"])
df = pd.DataFrame(tsv_read)
df = pd.DataFrame(df.vector.str.split(' ',1).tolist(),
columns = ['label','vector'])
print ("Features:" , df.vector)
print ("Labels:" , df.label)
X_train, X_test, y_train, y_test = train_test_split(df.vector, df.label, test_size=0.2,random_state=0)
#Create a svm Classifier
clf = svm.SVC(kernel='linear')
#Train the model using the training sets
clf.fit (str((X_train, y_train)))
#Predict the response for test dataset
y_pred = clf.predict(X_test)
print("Accuracy:",metrics.accuracy_score(y_test, y_pred))
第一次尝试运行脚本时,在第28行出现了以下错误:
ValueError: could not convert string to float:
所以我从
clf.fit (X_train, y_train)
为了
clf.fit (str((X_train, y_train)))
然后,在同一行上,我收到了这个错误。
TypeError: fit() missing 1 required positional argument: 'y'
建议如何解决这个问题?
谢谢您的时间,此致敬礼。
str((X_train, y_train))
返回的结果吗(它是无效的)?请分享一些训练数组的样本。 - undefineddf = pd.DataFrame(df.vector.str.split(' ',1).tolist(), columns = ['label','vector'])
告诉我你的数据仍然是字符串而不是数字,这在支持向量机(SVM)中是不被支持的,你需要将数据转换为整数或浮点数。 - undefinedtsv_read
,你会发现它已经是一个数据框。df = pd.DataFrame(tsv_read)
这一行是不必要的。你创建了tsv
文件吗?如果是的话,是怎么创建的?看起来像字典一样的值是字符串(带引号的)吗?通过csv/tsv这样的文本文件保存/加载数据框是很麻烦的。 - undefined