第一次接触人工智能学习中的机器学习方面,难免有些迷茫
特征值:接触了这个名词后就感觉肯定和矩阵脱离不了干系了
对于数据的特征值的要进行抽取,在这个之前需要用到Scikit_learn这个python中的一个模块,我用的是windows,所以就直接在https://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载了.whl文件进行安装,安装之前需要安装这个模块的两个依赖的包,numpy和pandas,安装完成后能够导入import sklearn就说明成功了
- 第一次是对字典类型的数据进行数据的抽取
from sklearn.feature_extraction import DictVectorizer
def DictVect():
"""
对于字典类型的数据进行抽取特征值
:return: None
"""
#实例化
dict = DictVectorizer()
data = dict.fit_transform([{'北京':100},{"上海":60},{"广州":70}])
print(data)
return None
if __name__=="__main__":
DictVect()
抽取出来的结果就是:
(0, 1) 100.0
(1, 0) 60.0
(2, 2) 70.0
第一次敲完代码看到这些值我也什么都不知道,最后在研究后发现其实这也就是矩阵,这不过是为了节省内存才进行这样的优化,如果想要看到完整的矩阵,将DictVectorizer中的参数sparse=False就可以输出正常的矩阵
dict = DictVectorizer(sparse=False)
[[ 0. 100. 0.]
[ 60. 0. 0.]
[ 0. 0. 70.]]
对比下来其实两个表达的是一个意思
抽取完成的这样的数字对于我们来说其实没有什么,但是这个对于机器来说尤为重要,机器用这些数字才能进行分析和学习
2.对于文章的抽取
from sklearn.feature_extraction.text import CountVectorizer
def text():
"""
对于文章的特征值得抽取
:return:None
"""
cv = CountVectorizer()
data=cv.fit_transform(["life is short,i like python","life is too long,i dislike python"])
print(cv.get_feature_names())
print(data.toarray())
return None
if __name__=="__main__":
text()
结果为:
['dislike', 'is', 'life', 'like', 'long', 'python', 'short', 'too'] #对于单个英文字母不统计,因为一个字母反映不出来文章主题
[[0 1 1 1 0 1 1 0] # 矩阵对应了上面特征值在每个文本中出现的次数
[1 1 1 0 1 1 0 1]]
代码中
cv = CountVectorizer()想要将输出的矩阵转换,但是这个方法中没有sparse=False这个参数,但是numpy这个模块中有toarray()方法可以进行转换,所以就有data.toarray()
文本特征抽取的应用特别广泛,比如文本分类,情感分析
不同的文章之间分析不同的词语,就可以对文章进行分类,
文本分析对于中文来将结果如下:
data=cv.fit_transform(["人生苦短,要学python","人生漫长,不用python"])
['不用python', '人生漫长', '人生苦短', '要学python']
[[0 0 1 1]
[1 1 0 0]]
结果看起来并不是我们想要的结果,这样的分解对于文章的整体性来讲并没有什么意义
但是只要将中文的词语之间加上空格,才会将各个词语分解开来
对于英文来讲不需要进行分词,但对于中文需要进行处理
pip install jieba
import jieba
con1=jieba.cut("人生苦短,要学python") #分割成字符串
concent1=list(con1) #转换成列表
c1=' '.join() #用join进行拼接