Valueerror: не удалось преобразовать строку в float-проблему. Интересно, может ли кто-нибудь помочь мне найти решение этой проблемы
Привет, я все время получаю ошибку значения не удалось преобразовать строку в float. У меня есть набор данных с 2 столбцами, один из которых имеет метку, идентифицированную в 1 и 0, а другой-твиты. Мне интересно, как исправить эту проблему, я преобразовал текст с помощью ВЕКТОРИЗАТОРА TFID. Цель состоит в том, чтобы использовать оптимизацию роя частиц и SVM
from sklearn.model_selection import train_test_split SEED = 2000 x_train, x_test, y_train, y_test = train_test_split(x,y, test_size=0.2, random_state=1) tvec = TfidfVectorizer(stop_words='english',max_features=10000) tvec.fit(x_train) tvec.fit(x_test) def PSO(objf,lb,ub,dim,PopSize,iters,trainInput,trainOutput, testInput, testOutput): Vmax=6 PopSize=50 #population size wMax=1 wMin=0.1 c1=2 c2=6 s=sol vel=np.zeros((PopSize,dim)) pBestScore=np.zeros(PopSize) pBestScore.fill(float("inf")) pBest=np.zeros((PopSize,dim)) gBest=np.zeros(dim) gBestScore=float("inf") pos=(np.random.uniform(0,1,(PopSize,dim)))*list(np.array(ub) - np.array(lb))+lb convergence_curve=np.zeros(iters) print("PSO is optimizing \""+objf.__name__+"\"") timerStart=time.time() sp = np.array((1,dim)) for l in range(0,iters): for i in range(0,PopSize): pos[i,:]=np.clip(pos[i,:], lb, ub) #Calculate objective function for each particle fitness=objf(pos[i,:],trainInput,trainOutput, testInput, testOutput) if(pBestScore[i]>fitness): pBestScore[i]=fitness pBest[i,:]=pos[i,:] if(gBestScore>fitness): gBestScore=fitness gBest=pos[i,:] #Update the W of PSO w=wMax-l*((wMax-wMin)/iters); for i in range(0,PopSize): for j in range (0,dim): r1=random.random() r2=random.random() vel[i,j]=w*vel[i,j]+c1*r1*(pBest[i,j]-pos[i,j])+c2*r2*(gBest[j]-pos[i,j]) if(vel[i,j]>Vmax): vel[i,j]=Vmax if(vel[i,j]<-Vmax): vel[i,j]=-Vmax pos[i,j]=pos[i,j]+vel[i,j] convergence_curve[l]=gBestScore if (l%1==0): print(['At iteration '+ str(l+1)+ ' the best fitness is '+ str(gBestScore)]); timerEnd=time.time() s.bestIndividual=gBest print ("the individual is" + str(s.bestIndividual)) return s.bestIndividual def fitness_function(posi,trainInput,trainOutput, testInput, testOutput): svcModel = svm.SVC(kernel='rbf', C = posi, gamma = 'auto' ) svcModel.fit(trainInput, trainOutput) y_train_pred = svcModel.predict(trainInput) y_test_pred = svcModel.predict(testInput) acc = metrics.accuracy_score(testOutput, y_test_pred) error = 1 - acc print("the vale of c is" + str(svcModel.C) + "and gamma is" + str(svcModel.gamma)) return error from sklearn import svm x = PSO(fitness_function,lb=lb,ub=ub,dim=1,PopSize=25,iters=100,trainInput=x_train,trainOutput=y_train, testInput = x_test, testOutput = y_test)
обратная связь, которую я получаю, заключается в следующем:
PSO is optimizing "fitness_function" --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-186-01c36f4c7d74> in <module> 1 from sklearn import svm ----> 2 x = PSO(fitness_function,lb=lb,ub=ub,dim=1,PopSize=25,iters=100,trainInput=x_train,trainOutput=y_train, testInput = x_test, testOutput = y_test) <ipython-input-182-2abf941cb939> in PSO(objf, lb, ub, dim, PopSize, iters, trainInput, trainOutput, testInput, testOutput) 55 pos[i,:]=np.clip(pos[i,:], lb, ub) 56 #Calculate objective function for each particle ---> 57 fitness=objf(pos[i,:],trainInput,trainOutput, testInput, testOutput) 58 if(pBestScore[i]>fitness): 59 pBestScore[i]=fitness <ipython-input-183-8f34546525e3> in fitness_function(posi, trainInput, trainOutput, testInput, testOutput) 2 3 svcModel = svm.SVC(kernel='rbf', C = posi, gamma = 'auto' ) ----> 4 svcModel.fit(trainInput, trainOutput) 5 y_train_pred = svcModel.predict(trainInput) 6 y_test_pred = svcModel.predict(testInput) ~\Anaconda3\lib\site-packages\sklearn\svm\_base.py in fit(self, X, y, sample_weight) 160 X, y = self._validate_data(X, y, dtype=np.float64, 161 order='C', accept_sparse='csr', --> 162 accept_large_sparse=False) 163 164 y = self._validate_targets(y) ~\Anaconda3\lib\site-packages\sklearn\base.py in _validate_data(self, X, y, reset, validate_separately, **check_params) 430 y = check_array(y, **check_y_params) 431 else: --> 432 X, y = check_X_y(X, y, **check_params) 433 out = X, y 434 ~\Anaconda3\lib\site-packages\sklearn\utils\validation.py in inner_f(*args, **kwargs) 71 FutureWarning) 72 kwargs.update({k: arg for k, arg in zip(sig.parameters, args)}) ---> 73 return f(**kwargs) 74 return inner_f 75 ~\Anaconda3\lib\site-packages\sklearn\utils\validation.py in check_X_y(X, y, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, multi_output, ensure_min_samples, ensure_min_features, y_numeric, estimator) 801 ensure_min_samples=ensure_min_samples, 802 ensure_min_features=ensure_min_features, --> 803 estimator=estimator) 804 if multi_output: 805 y = check_array(y, accept_sparse='csr', force_all_finite=True, ~\Anaconda3\lib\site-packages\sklearn\utils\validation.py in inner_f(*args, **kwargs) 71 FutureWarning) 72 kwargs.update({k: arg for k, arg in zip(sig.parameters, args)}) ---> 73 return f(**kwargs) 74 return inner_f 75 ~\Anaconda3\lib\site-packages\sklearn\utils\validation.py in check_array(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, estimator) 597 array = array.astype(dtype, casting="unsafe", copy=False) 598 else: --> 599 array = np.asarray(array, order=order, dtype=dtype) 600 except ComplexWarning: 601 raise ValueError("Complex data not supported\n" ~\Anaconda3\lib\site-packages\numpy\core\numeric.py in asarray(a, dtype, order) 536 537 """ --> 538 return array(a, dtype, copy=False, order=order) 539 540 ~\Anaconda3\lib\site-packages\pandas\core\series.py in __array__(self, dtype) 946 warnings.warn(msg, FutureWarning, stacklevel=3) 947 dtype = "M8[ns]" --> 948 return np.asarray(self.array, dtype) 949 950 # ---------------------------------------------------------------------- ~\Anaconda3\lib\site-packages\numpy\core\numeric.py in asarray(a, dtype, order) 536 537 """ --> 538 return array(a, dtype, copy=False, order=order) 539 540 ~\Anaconda3\lib\site-packages\pandas\core\arrays\numpy_.py in __array__(self, dtype) 164 165 def __array__(self, dtype=None): --> 166 return np.asarray(self._ndarray, dtype=dtype) 167 168 _HANDLED_TYPES = (np.ndarray, numbers.Number) ~\Anaconda3\lib\site-packages\numpy\core\numeric.py in asarray(a, dtype, order) 536 537 """ --> 538 return array(a, dtype, copy=False, order=order) 539 540 ValueError: could not convert string to float: 'stop talking to other peoples girlfriends'
Что я уже пробовал:
Я понимаю, что проблема заключается в SVM fit. Однако я использовал TFIDF Vectorizer для преобразования текста. могу ли я сделать что-нибудь еще?