机器学习中遇到的一个问题,请各位帮忙看一下,感谢!!
下面是一个文本特征抽取的代码:
from sklearn.feature_extraction.text import CountVectorizer
transfer = CountVectorizer
data = ["life is short ,i like like python","life is too long,i dislike python","do you like python?"]
data_new = transfer.fit_transform(data)
print("data_new:\n",data_new.toarray())
print("特征名字:\n",transfer.get_feature_names_out())
其中
data_new = transfer.fit_transform(data)
语句出现问题,报错提示是:
Traceback (most recent call last):
File "D:\dev\python\python3.11.3\project\python-learn\machine_learning\03.py", line 4, in <module>
data_new = transfer.fit_transform(data)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\dev\python\python3.11.3\Lib\site-packages\sklearn\base.py", line 1144, in wrapper
estimator._validate_params()
^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'list' object has no attribute '_validate_params'
请问这是出现了什么问题啊?该如何解决?
(注:本人刚简单学习完一遍python基础语法来学习机器学习,烦请各位解答时说的尽可能通俗易懂些,不然我怕我听不懂,谢了)
你好!这个问题的原因是你在初始化 CountVectorizer 类时忘记加上括号,导致 transfer 变成了一个 CountVectorizer 类本身而不是一个类的实例。因此,在调用 fit_transform 方法时出现了错误。
要解决这个问题,只需将代码中的一行更改为 transfer = CountVectorizer(),代码就能正确运行了。这样就会创建一个 CountVectorizer 类的实例,然后你就可以使用 fit_transform 方法进行特征抽取了。
修正后的代码如下所示:
from sklearn.feature_extraction.text import CountVectorizer
transfer = CountVectorizer()
data = ["life is short, I like like python", "life is too long, I dislike python", "do you like python?"]
data_new = transfer.fit_transform(data)
print("data_new:\n", data_new.toarray())
print("特征名字:\n", transfer.get_feature_names_out())
LDA也叫做Fisher线性判别(FLD)是一种有监督的线性降维算法。与PCA尽可能的保留数据信息不同,LDA的目标是使降维后的数据点尽可能地容易被区分,利用了其标签信息。
我们使用lda库的LDA类选择特征。
# LDA
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA
#线性判别分析法,返回降维后的数据
#n_components为降维后的数目
LDA(n_components=2).fit_transform(iris.data,iris.target)
结果如下:
总结一下吧,今天主要介绍了一些常见的降维方法,相信大家用的较多的还是线性方式降维。但其他的方式也是需要大致了解一下,如果对于他们的数学原理感兴趣的小伙伴可以去查查资料!