[英]sklearn OneHotEncoder broken- ValueError: could not convert string to float
[英]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.