【问题标题】:Unable to convert string to float in Logistic Regression无法在逻辑回归中将字符串转换为浮点数
【发布时间】:2021-08-03 06:53:04
【问题描述】:

我写了以下代码:

from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

Spam_model = LogisticRegression(solver='liblinear', penalty='l1')
print(X_train)

Spam_model.fit(X_train, Y_train)
pred = Spam_model.predict(X_test)
accuracy_score(Y_test,pred)

它抛出以下错误。这可能是什么原因?

【问题讨论】:

  • 请在文本格式中发布任何错误或异常。 Here's why
  • 如果您正在处理文本,请检查 tf-idf 方法。我猜问题是下面提到的未命名。

标签: python logistic-regression


【解决方案1】:

逻辑回归适用于数字,而不是字符串。您输入一个值(或更多),它会预测另一个值。浮点数是带小数的数字。例如,2 是整数,2.53 是浮点数。你能做的是

a = '0.67687980'
print(float(a))

返回

0.67687980

但是,你不能用字符串来做

a = 'Some string'
print(float(a))

返回时:

ValueError: could not convert string to float: 'Some string'

如果您使用的数据不是数字,则应先将其全部转换为数字以避免此错误

【讨论】:

    【解决方案2】:

    如果你有文本作为数据,你需要在应用分类器之前做feature extraction。使用来自 sklearn 的 old example

    from sklearn.datasets import fetch_20newsgroups
    cats = ['alt.atheism', 'sci.space']
    
    newsgroups_train = fetch_20newsgroups(subset='train', categories=cats)
    X_train = newsgroups_train.data
    Y_train = newsgroups_train.target
    
    newsgroups_test = fetch_20newsgroups(subset='test', categories=cats)
    X_test = newsgroups_test.data
    Y_test = newsgroups_test.target
     
    

    数据如下所示:

    Y_train
    array([0, 1, 1, ..., 1, 1, 1])
    
    X_train[0][:50]
    'From: bil@okcforum.osrhe.edu (Bill Conner)\nSubject'
    

    应用矢量化器将文本转换为基本的数字特征,然后训练模型:

    from sklearn.feature_extraction.text import TfidfVectorizer
    from sklearn.linear_model import LogisticRegression
    from sklearn.metrics import accuracy_score
    
    vectorizer = TfidfVectorizer()
    X_train_vec = vectorizer.fit_transform(X_train)
    X_test_vec = vectorizer.transform(X_test)
    
    model = LogisticRegression(solver='liblinear', penalty='l1')
    
    model.fit(X_train_vec, Y_train)
    pred = model.predict(X_test_vec)
    accuracy_score(Y_test,pred)
    
    0.906030855539972
    

    【讨论】:

    猜你喜欢
    • 2019-10-22
    • 2018-11-19
    • 2020-10-16
    • 2018-09-14
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    • 2021-06-15
    相关资源
    最近更新 更多