自然语言处理(词向量转化)PCA降维
一、自然语言处理NLP自然语言处理和机器学习一样是人工智能的一个领域如果说机器学习是让机器像人一样会发现规律那自然语言处理中的词向量转化就是把语言中文英文等语言转化为向量也就是矩阵。因为模型只能接受数值把文本转化为向量使得机器能够接收这样机器就能理解和处理人类语言。一个单词的向量表示该单词在多维空间中的位置通过向量之间的几何关系如距离、角度可以体现词语的语义关系。多个词向量可以通过运算如加权平均得到综合向量表示。自然语言处理有两种主要方法将语言转化为向量基于深度学习的方法训练每个单词的含义表达式比如CBOW用上下文预测当前词skip-gram用当前词预测上下文word2vec包括CBOW和skip-gram基于统计的方法例如tf-idf词频统计将文档转化为数值向量深度学习是机器学习一个重要的分支。传统的机器学习通常是需要人根据原始数据定义特征而深度学习能自动从原始数据中提取特征。在自然语言处理中深度学习模型可以自动学习高质量的词向量表示这些向量能更好的捕捉词语的语义关系从而达到让机器理解人类语言的意思。深度学习补充神经网络的卷积核就是用来特征提取的卷积核就像是人类的眼睛每个卷积提取的图片就叫特征图多个卷积核就会提取多个特征图损失函数计算预测值和真实值误差通过反向传播和优化器更新权重从而更新卷积核特征图就会发生变化当输出结果和真实结果误差在可接受范围内的时候那就代表特征提取正确了模型学习到的是有效的1.词向量转化小例子ngram_range1,3的意思是单词可以是一个两个组合这样做是为了自然语言的语言连贯性少了会丢失信息。Max_features6的意思是在获取到的所有词中出现频率最大的前六个词列出来其他的不用列这里的cv_fitcv.fit_transform(texts)可拆分为两部vec.fittextsvec.transformtexts如果拆分的话先得到训练集的单词库from sklearn.feature_extraction.text import CountVectorizer texts[dog cat fish,dog cat cat,fish bird, bird] cont [] #实例化一个模型 cv CountVectorizer(max_features6,ngram_range(1,3))#统计每篇文章中每个词出现的频率次数 #训练此模型 cv_fitcv.fit_transform(texts)#每个词在这篇文章中出现的次数 print(cv_fit) # 打印出模型的全部词库 print(cv.get_feature_names()) #打印出每个语句的词向量 print(cv_fit.toarray())2.好评差评词向量转化这里使用的好评差评是网页爬虫中对苏宁易购的好评差评的爬取读取数据好评差评 import pandas as pd goodpd.read_table(../好评.txt,encodingutf-8,headerNone) badpd.read_table(../差评.txt,encodingutf-8,headerNone)#以table形式读取 jieba分词 #对好评分词 import jieba good_words[] contentsgood[0].tolist() for content in contents: resultsjieba.lcut(content) if len(results)1: good_words.append(results) good_fc_resultspd.DataFrame({content:good_words}) good_fc_results.to_excel(good_fc_results.xlsx,indexFalse) #对差评分词 bad_words [] contents bad[0].tolist() for content in contents: results jieba.lcut(content) if len(results) 1: bad_words.append(results) bad_fc_results pd.DataFrame({content: bad_words}) bad_fc_results.to_excel(bad_fc_results.xlsx, indexFalse) 过滤停用词 #导入停用词 stopwordspd.read_csv(rD:\人工智能\机器学习算法\机器学习课件\11、词向量转换评论学习项目分析\StopwordsCN.txt ,encodingutf-8,enginepython,index_colFalse) #定义去除停用词函数 def drop_stopwords(contents,stopwords): segments_clean [] for content in contents: line_clean [] for word in content: if word in stopwords: continue line_clean.append(word) segments_clean.append(line_clean) return segments_clean#每一行的分词结果 # 调用去除停用词函数 contents bad_fc_results.content.values.tolist() # DataFrame格式转为list格式 stopwords stopwords.stopword.values.tolist() # 停用词转为list格式 bad_fc_contents_clean_s drop_stopwords(contents, stopwords) contents good_fc_results.content.values.tolist() # DataFrame格式转为list格式 good_fc_contents_clean_s drop_stopwords(contents, stopwords) 朴素贝叶斯分类 #给每个数据添加数字标签 bad_trainpd.DataFrame({segments_clean:bad_fc_contents_clean_s, label:1})#构建一个表格数据 good_trainpd.DataFrame({segments_clean:good_fc_contents_clean_s, label:0}) pj_train pd.concat([bad_train,good_train]) pj_train.to_excel(pj_train.xlsx,indexFalse) #数据划分 from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test \ train_test_split(pj_train[segments_clean].values, pj_train[label].values, random_state0) #test_size使用默认值 #将所有的词转换为词向量 words [] #转换为词向量CountVectorizer所能识别的列表类型 for line_index in range(len(x_train)): words.append( .join(x_train[line_index])) print(words) # 导入词向量转化库 from sklearn.feature_extraction.text import CountVectorizer vec CountVectorizer(max_features4000,lowercase False, ngram_range(1,3)) #lowercase参数的功能把所有的词是是否需要转换为小写。False。 #max_features表示只提取前4000个词作为词库。 vec.fit(words)#传入训练集的所有文字根据文字构建模型要将训练集 的所有单词作为词库 一会还有测试集的文本 #导入朴素贝叶斯分类器 from sklearn.naive_bayes import MultinomialNB,ComplementNB classifier MultinomialNB(alpha 0.1)# classifier.fit(vec.transform(words), y_train)#54093*4000 train_pr classifier.predict(vec.transform(words))#训练数据集的测试 #训练集数据预测得分 from sklearn import metrics print(metrics.classification_report(y_train, train_pr))#分类结果。 #测试集数据进行分析 test_words [] for line_index in range(len(x_test)): test_words.append( .join(x_test[line_index])) test_pr classifier.predict(vec.transform(test_words))#基于 训练集的词库转换得到的词向量 #测试集数据预测得分 print(metrics.classification_report(y_test, test_pr))#分类结果。这里使用的是贝叶斯算法贝叶斯有五种采取多样式贝叶斯补充贝叶斯等……每种贝叶斯有其适用的情况这里采取多样式和补充贝叶斯是适用的这里我们能对模型进行优化优化方法在逻辑回归的时候有介绍测试集转入模型也就是我们写一句话首先要进行分词转化为标准格式基于训练集词库进行词向量转化。可以采用一些方法对数据进行处理逻辑回归介绍的方法都可以提升正确率二、PCA降维1.核心思想PCA主成分分析法通过线性变换将原始数据映射到新的坐标轴上主成分这些轴按方差大小排序2.降维过程1二维转一维选择一个方向方差最大2三维转二维找方差最大方向和方差第二大的方向。两个方向协方差为0也就是垂直。次大的方差方向和最大方差方向很近这样的次大方差方向是不可以用的需要两方向的基底是线性无关的夹角为90度。协方差计算两两是否线性相关协方差为0 则线性无关。所以我们找这两个方向需要满足两个条件方差最大协方差为03.与随机森林的区别随机森林中会有一个特征重要排列可以把没用的特征删去但是这里的PCA不是删除一个特征维度而是找到一个更合适的维度使得数据更好的表达
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2419655.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!