【问题标题】:GausianNB: Could not convert string to float: 'Thu Apr 16 23:58:58 2015'GausianNB:无法将字符串转换为浮点数:'Thu Apr 16 23:58:58 2015'
【发布时间】:2017-06-16 12:50:15
【问题描述】:

我正在尝试使用 GaussianNB 解决机器学习问题。我的某些字段的日期格式不正确,因此我将它们转换为 UNIX 格式。例如,state_changed_at 列在 csv 中的值为1449619185。我正在将其转换为正确的日期格式。

当我选择这些日期特征来训练我的模型时,我收到了这个错误:

无法将字符串转换为浮点数:'Thu Apr 16 23:58:58 2015'

import pandas as pd
import numpy as np
from sklearn import metrics
from sklearn.naive_bayes import BernoulliNB
from sklearn.naive_bayes import MultinomialNB
import time
from sklearn.naive_bayes import GaussianNB

train = pd.read_csv("datasets/train2.csv")
test = pd.read_csv("datasets/test.csv")
train.head()

import time

#   state_changed_at,deadline,created_at,launched_at are date time fields
# and I'm converting it into unix format
unix_cols = ['deadline','state_changed_at','launched_at','created_at']

for x in unix_cols:
    train[x] = train[x].apply(lambda k: time.ctime(k))
    test[x] = test[x].apply(lambda k: time.ctime(k))


#   state_changed_at,deadline,created_at,launched_at are date time fields.
cols_to_use = ['keywords_len' ,'keywords_count','state_changed_at','deadline','created_at','launched_at']

target = train['final_status']

# data for modeling
k_train = train[cols_to_use]
k_test = test[cols_to_use]


gnb = GaussianNB()

model = MultinomialNB()
model.fit(k_train, target)  # this lines gives me error saying: could not convert string to float: 'Thu Apr 16 23:58:58 2015'

expected = target
predicted = model.predict(k_test)
print(model.score(k_test, predicted, sample_weight=None))

【问题讨论】:

    标签: python-3.x machine-learning gaussian data-science


    【解决方案1】:

    你的困惑是什么?你给了它 DateTime 列。 SKLearn.fit 不接受该类型。具体来说:

    Parameters: 
    X : array-like, dtype=float64, size=[n_samples, n_features]
    Y : array, dtype=float64, size=[n_samples]
    

    如果您想按时间训练,您需要将它们转换(或保留)为可摄取类型,即基本数字。在执行拟合时,您能否将它们保留为原始的、基于纪元的整数形式?

    【讨论】:

    • 好的。那么我应该使用日期时间字段而不转换为 UTX 格式吗?
    • 没有。一旦你转换为 DateTime,你就输了。 DateTime 没有到float64 的内置转换,这是基本类型。您需要将其保留为数值,例如原始的1449619185。如果您需要显示 DateTime 值,请在应用 libSVM 之后进行转换,或者为每个 DateTime 项创建一个额外的列。
    • 如果我们直接使用浮点数而不转换它,我的模型会给出很好的精度吗?
    • 我不知道......当你尝试它时发生了什么?当您拥有计算机的最终权限时,不要问。 :-) 您将获得与转换数据相同的精度。 DateTime 不会提取任何新信息,也不会改变值之间的关系。
    • 好的。我试过了,但精度很低,这就是我问的原因。无论如何,感谢您消除我的疑问。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    相关资源
    最近更新 更多