簡體   English   中英

OneHotEncoder 擬合錯誤 ValueError:無法將字符串轉換為浮點數:b

[英]OneHotEncoder fit error ValueError: could not convert string to float: b

from sklearn.preprocessing import OneHotEncoder
enc = OneHotEncoder(dtype=np.str)
enc.fit([['b', 'c', 'd'], ['a', 'd', 'f']])
print enc.transform([['a', 'd', 'f']]).toarray()

ValueError:無法將字符串轉換為浮點數:b

sklearn。 版本= 0.19.2

如果 dtype = np.int64 它也不能工作

OneHotEncoder 中的 dtype 用於所需的 output 並且僅支持數字類型並且您正在傳遞 np.str 這就是您收到錯誤的原因

import numpy as np
from sklearn.preprocessing import OneHotEncoder
enc = OneHotEncoder(dtype = 'int64') #by default dtype is float 
enc.fit([['b', 'c', 'd'], ['a', 'd', 'f']])
print(enc.transform([['a', 'd', 'f']]).toarray())
#op
[[1 0 0 1 0 1]]

嘗試

enc = enc.fit([['b', 'c', 'd'], ['a', 'd', 'f']])
enc.data #--> array(['1.0', '1.0', '1.0'], dtype='<U32')
enc.data.tolist()

OneHotEncoder 期望您的輸入數據在將它們轉換為虛擬變量之前采用數字格式。 因此,您可能希望首先使用 LabelEncoder 進行 fit_transform 將分類數據轉換為數字。

另一種更簡潔的方法是使用 LabelBinarizer,其工作方式類似於使用 LabelEncoder 和 OneHotEncoder:

from sklearn.preprocessing import LabelBinarizer
encoder = LabelBinarizer()
encoder = encoder.fit(['a', 'd', 'f'])
print(encoder.transform(['a','d','f']))

我使用sklearn 0.21得到了正確的output,這應該是sklearn版本的問題,謝謝大家!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM