
朴素贝叶斯算法介绍朴素贝叶斯的“朴素”之处在于假设特征属性之间是相互独立的而不是样本之间朴素贝叶斯情感分类案例pip install jieba-jieba分词器可以切词删除无效词 案例 演示通过朴素贝叶斯算法 实现 商品评论情感分析即好评差评... 朴素贝叶斯介绍 概述 贝叶斯仅仅依赖 概率 就可以进行分类的 一种机器学习算法 朴素不考虑特征之间的关联性即特征间都是相互独立的 原始p(AB)P(A)*P(B|A 加入朴素后p(AB)P(A)*P(B) 细节 因为我们分词要用到jieba分词器所以要先装一下pip install jieba #导包 import jieba#分词器 import pandas as pd#数据处理包 import numpy as np#数学计算包 import matplotlib.pyplot as plt#画图包 from sklearn.feature_extraction.text import CountVectorizer#词频统计包把评论内容转换为词频矩阵 from sklearn.metrics import accuracy_score from sklearn.naive_bayes import MultinomialNB#朴素贝叶斯模型 #1.读取文件获取到原始数据 dfpd.read_csv(./datas/书籍评价.csv,encodinggbk) # df.info() # print(df) #2.数据预处理 #2.1添加labels列充当标签列。好评1差评0 df[labels]np.where(df[评价]好评,1,0) # df.info() # print(df) #2.2抽取labels列作为标签 ydf[labels] #2.3演示jieba分词 # print(list(jieba.cut(我是一个学生)))#[我, 是, 一个, 学生] #2.4对用户的评论信息做切词 # 数据格式: [[第1条评论切词1, 切词2, 切词3...], [第2条评论切词1, 切词2, 切词3...], ...] comment_list [,.join(jieba.cut(line)) for line in df[内容]] # 数据格式: [第1条评论切词1, 切词2, 切词3..., 第2条评论切词1, 切词2, 切词3..., ...],加上,.join就可以转换成这个形式 # print(comment_list) #演示字符串的join()函数用法 # my_list[aa,bb,cc] # print(,.join(my_list))#aa,bb,cc #2.5加载停用词列表即里面记录的词不需要参与模型训练预测要被删除的词例如的啊哈... with open(./datas/stopwords.txt,r,encodingutf-8) as src_f: #2.5.1一次读取所有的行 stopwords_listsrc_f.readlines() #2.5.2删除换行符 stopwords_list[line.strip() for line in stopwords_list] #2.5.3对停用词列进行去重 stopwords_listlist(set(stopwords_list)) #2.5.4打印停用词列表 print(stopwords_list) #2.6创建向量化对象从评论词列表(comment_list)中删除停用词并统计词频(单词矩阵) transferCountVectorizer(stop_wordsstopwords_list)#参数stop_words停用词列表 #2.7统计词频矩阵先训练后转换再转数组 transfer.fit(comment_list) # x的格式: [[第1条评论的切词分布, 有就是1, 没有就是0], [第2条评论的切词分布, 有就是1, 没有就是0], ...] xtransfer.transform(comment_list).toarray() print(x) #2.8看一下我们13条评论切词且删除停用词后一共剩下多少个词了 print(transfer.get_feature_names_out()) print(len(transfer.get_feature_names_out()))#37个词即13条评论切词且删除停用词后剩下37个词 #2.9因为就13条数据我们把前10条当训练集后3条当测试集 x_trainx[:10] y_trainy[:10] x_testx[10:] y_testy[10:] #3.特征工程 #4.模型训练 estimatorMultinomialNB()#创建朴素贝叶斯模型对象 estimator.fit(x_train,y_train)#训练模型 #5.预测模型 y_predictestimator.predict(x_test) print(f预测结果{y_predict}) # 6. 模型评估. print(f准确率: {accuracy_score(y_test, y_predict)})聚类算法简介聚类算法API的使用 Kmeans聚类算法入门案例 Kmeans简介 它属于无监督学习即有特征无标签根据样本间的相似性进行划分 所谓相似性 可以理解为就是距离例如欧式距离曼哈顿城市街区距离切比雪夫距离闵式距离 一般大厂项目初期在没有先备知识(标签)的情况下可能会用 import os os.environ[LOKY_MAX_CPU_COUNT] 4 import warnings warnings.filterwarnings(ignore) os.environ[TF_CPP_MIN_LOG_LEVEL] 4#OpenMP多任务程序这里设置为4个线程防止出现线程冲突等 #导包 import numpy as np from sklearn.cluster import KMeans#聚类的API,采用指定质心来分簇 import matplotlib.pyplot as plt#绘图的 from sklearn.datasets import make_blobs#默认会按照高斯分布(正态分布)生成数据集只需要指定均值、标准差 from sklearn.metrics import calinski_harabasz_score#评价指标值越大效果越好 #1.准备数据集 #参1样本数量 参2样本特征数量2列 参3质心数量4个 参4每个质心的标准差 参5随机种子 x,ymake_blobs(n_samples100,n_features2,centers[[-1,-1],[0,0],[1,1],[2,2]],cluster_std[0.4,0.2,0.3,0.5],random_state42) # print(x) # print(y) #2.绘制上述的图形 #参1x轴坐标 参2y轴坐标 参3颜色 plt.scatter(x[:,0],x[:,1]) plt.show() #3.创建Kmeans对象 #参1聚类数量 参2随机种子 estimatorKMeans(n_clusters4,random_state4) #4.模型训练和预测 y_predestimator.fit_predict(x) #5.绘制预测结果 #参1x轴坐标 参2y轴坐标 参3预测结果 plt.scatter(x[:,0],x[:,1], cy_pred) plt.show() #6.评价指标 print(f评价指标评分{calinski_harabasz_score(x,y_pred)})#越大越好Kmeans实现流程模型评估方法误差平方和SSE真实值-质心簇内距离误差开发流程高内聚低耦合自己能搞定的事就不麻烦别人SSE越小说明点越密集内聚程度越高SC轮廓系数法CH轮廓系数法案例顾客数据聚类分析法 案例基于用户的年收入和消费指数根据用户的相似性进行聚类 import os os.environ[LOKY_MAX_CPU_COUNT] 4 import warnings warnings.filterwarnings(ignore) os.environ[TF_CPP_MIN_LOG_LEVEL] 4#OpenMP多任务程序这里设置为4个线程防止出现线程冲突等 #导包 from sklearn.cluster import KMeans import pandas as pd import matplotlib.pyplot as plt from sklearn.datasets import make_blobs from sklearn.metrics import calinski_harabasz_score, silhouette_score #1.定义函数找聚类的质心数K值 def dm01_find_k(): #1.加载数据集 dfpd.read_csv(./datas/customers.csv) #2.定义sse_list,sc_list记录不同K值的评估效果 sse_list[] sc_list[] #抽取特征 xdf.iloc[:,3:5] #3.定义for训练测试不同K值的评估效果 for k in range(2,20): #3.1创建KMeans模型 estimatorKMeans(n_clustersk,random_state23) #3.2训练模型 estimator.fit(x) #模型预测 y_predestimator.predict(x) #3.3获取模型的评估效果 sse_valueestimator.inertia_ sc_valuesilhouette_score(x,y_pred) #3.4将每个K值对应的评估效果添加到sse_list,sc_list列表中 sse_list.append(sse_value) sc_list.append(sc_value) #4.绘制sse_list,sc_list的折线图 plt.figure(figsize(20,10)) plt.plot(range(2,20),sse_list,labelsse) plt.show() plt.figure(figsize(20, 10)) plt.plot(range(2,20),sc_list,labelsc) plt.show() #2.定义函数实现模型训练模型预测 def dm02_train_predict(): #1.加载数据集 dfpd.read_csv(./datas/customers.csv) #2.抽取特征 xdf.iloc[:,3:5] #3.模型训练,k5是刚才通过SSE肘部法,SC轮廓系数 获取出来的 estimatorKMeans(n_clusters5,max_iter100,random_state23) estimator.fit(x) #4.模型预测 y_predestimator.predict(x) #5.绘制5个簇的样本点-散点图 plt.scatter(x.values[y_pred0,0],x.values[y_pred0,1])#簇0 plt.scatter(x.values[y_pred1,0],x.values[y_pred1,1])#簇1 plt.scatter(x.values[y_pred2,0],x.values[y_pred2,1])#簇2 plt.scatter(x.values[y_pred3,0],x.values[y_pred3,1])#簇3 plt.scatter(x.values[y_pred4,0],x.values[y_pred4,1])#簇4 #6.绘制质心-散点图 plt.scatter(estimator.cluster_centers_[:,0],estimator.cluster_centers_[:,1],s100,cred,marker*)#质心 #7.设置坐标轴标签标题 plt.xlabel(Annual Income (k$) (1-100k)) plt.ylabel(Spending Score (Spending Score (1-100))) plt.title(Cluster Centers) # plt.legend([簇0,簇1,簇2,簇3,簇4,质心]) plt.show() #测试 if __name__ __main__: # dm01_find_k() dm02_train_predict()