程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了我正在尝试学习 scikit,但仍然坚持编码器的代码要求它们的输入是统一的字符串或数字大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决我正在尝试学习 scikit,但仍然坚持编码器的代码要求它们的输入是统一的字符串或数字?

开发过程中遇到我正在尝试学习 scikit,但仍然坚持编码器的代码要求它们的输入是统一的字符串或数字的问题如何解决?下面主要结合日常开发的经验,给出你关于我正在尝试学习 scikit,但仍然坚持编码器的代码要求它们的输入是统一的字符串或数字的解决方法建议,希望对你解决我正在尝试学习 scikit,但仍然坚持编码器的代码要求它们的输入是统一的字符串或数字有所启发或帮助;

我一直在通过 youtube 视频学习 Python。我是 Python 新手,只是一个初学者。我在视频上看到了这段代码,所以我试了一下,但得到了我不知道如何解决的错误。 这是我遇到麻烦的以下代码。我没有把整个代码写得太长。@H_403_1@

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.ensemble import RandomForestClassifIEr
from sklearn.svm import SVC
from sklearn import svm
from sklearn.neural_network import MLPClassifIEr
from sklearn.metrics import confusion_matrix,classification_report
from sklearn.preprocessing import StandardScaler,LabelEncoder
from sklearn.model_SELEction import Train_test_split
%matplotlib inline


wine = pd.read_csv('wine_quality.csv')
wine.head()
wine.info()
wine.isnull().sum()

#Preprocessing
bins=(2,6.5,8)
group_names=['bad','good']
wine['quality'] = pd.cut(wine['quality'],bins=bins,labels=group_names)
wine['quality'].unique()

label_quality=LabelEncoder()
wine['quality']=label_quality.fit_transform(wine['quality'])
#after this im getTing that error

'''TypeError                                 TraceBACk (most recent call last)
~\anaconda3\lib\site-packages\sklearn\preprocessing\_label.py in _encode(values,uniques,encode,check_unkNown)
    112         try:
--> 113             res = _encode_python(values,encodE)
    114         except TypeError:

~\anaconda3\lib\site-packages\sklearn\preprocessing\_label.py in _encode_python(values,encodE)
     60     if uniques is None:
---> 61         uniques = sorted(set(values))
     62         uniques = np.array(uniques,dtype=values.dtypE)

TypeError: '<' not supported between instances of 'float' and 'str'

During handling of the above exception,another exception occurred:

TypeError                                 TraceBACk (most recent call last)
<ipython-input-14-8e211b2c4bf8> in <module>
----> 1 wine['quality'] = label_quality.fit_transform(wine['quality'])

~\anaconda3\lib\site-packages\sklearn\preprocessing\_label.py in fit_transform(self,y)
    254         """
    255         y = column_or_1d(y,warn=TruE)
--> 256         self.classes_,y = _encode(y,encode=TruE)
    257         return y
    258 

~\anaconda3\lib\site-packages\sklearn\preprocessing\_label.py in _encode(values,check_unkNown)
    115             types = sorted(t.__qualname__
    116                            for t in set(type(v) for v in values))
--> 117             raise TypeError("Encoders require their input to be uniformly "
    118                             f"Strings or numbers. Got {types}")
    119         return res

TypeError: Encoders require their input to be uniformly Strings or numbers. Got ['float','str']'''
```

请帮我修正我的错误。如果你能确切地告诉我我该怎么做,那就太好了。@H_403_1@

解决方法

所以我检查了 Wine Quality 数据集,然后:

wine['quality'].unique()

我得到以下输出:

array([6,5,7,8,4,3,9],dtype=int64)

现在,由于我们的值超过了您在 pd.cut() 函数的 bin 中提供的上限,因此超出限制的值将替换为 NaN 值。我也在我的编译器上检查了它,所以在执行你的预处理之后

#Preprocessing
bins=(2,6.5,8)
group_names=['bad','good']
wine['quality'] = pd.cut(wine['quality'],bins=bins,labels=group_names)
wine['quality'].unique()

我为 wine['quality'].unique() 得到的结果是:

['bad','good',NaN]
Categories (2,object): ['bad' < 'good']

发生这种情况是因为所有超过 8(您提供的上限)的值都更改为 NaN,pd.cut() 函数的文档中也提到了这一点:

越界值在结果系列或分类对象中将为 NA。 因此,我建议您将 bin 中的上限增加到 9。我尝试这样做并且该函数运行良好,没有任何问题。

#Preprocessing
bins=(2,9)
group_names=['bad',labels=group_names)
wine['quality'].unique()

现在 wine['quality'].unique() 的输出是:

['bad','good']
Categories (2,object): ['bad' < 'good']

因此,我们不再有 NaN 值,您的标签编码器现在应该可以正常工作了。

大佬总结

以上是大佬教程为你收集整理的我正在尝试学习 scikit,但仍然坚持编码器的代码要求它们的输入是统一的字符串或数字全部内容,希望文章能够帮你解决我正在尝试学习 scikit,但仍然坚持编码器的代码要求它们的输入是统一的字符串或数字所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。