Member 14954419 Ответов: 2

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 для преобразования текста. могу ли я сделать что-нибудь еще?

2 Ответов

Рейтинг:
0

Richard MacCutchan

ValueError: could not convert string to float: 'stop talking to other peoples girlfriends'

Совершенно очевидно, что приведенная выше строка не может быть преобразована в значение с плавающей точкой.


CPallini

:-Д

Richard MacCutchan

Может быть, ОП думал, что это было частью сообщения об ошибке. Странный совет от компилятора. :))

Рейтинг:
0

Sandeep Mewara

То float() метод позволяет конвертировать только строки, которые выглядят как поплавки. Это означает, что вы не можете преобразовать значение, если:
1. Значение содержит пробелы
2. Значение содержит запятую
3. Значение содержит не специальные символы

Ошибка " valueerror: не удалось преобразовать строку в float” возникает, если вы не соответствуете ни одному из трех вышеперечисленных критериев. Это происходит потому, что Python не может преобразовать значение в float, если это значение не отображается определенным образом.

Теперь, глядя на трассировку стека, ошибка возникает из:

svcModel.fit(trainInput, trainOutput)
#internally
 X, y = self._validate_data(X, y, dtype=np.float64, order='C', accept_sparse='csr', accept_large_sparse=False)
Похоже, что с вашими данными возникли проблемы. Похоже, дело в плохих данных. Где - то это строка, которую нельзя преобразовать в числовое значение. Строка, которую вы можете искать как "перестать разговаривать с другими подружками людей", а не 0 или 1, Как вы поделились.

Проверьте свои данные и убедитесь, что они верны. Если его тысячи строк и трудно найти (с приведенным выше текстом это должно быть легко, хотя), прежде чем перейти к обучению, попробуйте простое преобразование float всех полей вашего столбца значений 0/1 и посмотрите, сможете ли вы найти плохие данные.