conda环境nvcc not found?CUDA 11.6编译链配置与排查指南
2026/10/6 13:23:28
朴素贝叶斯的“朴素”之处在于假设特征(属性)之间是相互独立的,而不是样本之间
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.读取文件,获取到原始数据 df=pd.read_csv('./datas/书籍评价.csv',encoding='gbk') # df.info() # print(df) #2.数据预处理 #2.1添加labels列,充当:标签列。好评:1,差评:0 df['labels']=np.where(df['评价']=='好评',1,0) # df.info() # print(df) #2.2抽取labels列,作为标签 y=df['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',encoding='utf-8') as src_f: #2.5.1一次读取所有的行 stopwords_list=src_f.readlines() #2.5.2删除换行符 stopwords_list=[line.strip() for line in stopwords_list] #2.5.3对停用词列进行去重 stopwords_list=list(set(stopwords_list)) #2.5.4打印停用词列表 print(stopwords_list) #2.6创建向量化对象,从评论词列表(comment_list)中删除停用词,并统计词频(单词矩阵) transfer=CountVectorizer(stop_words=stopwords_list)#参数:stop_words=停用词列表 #2.7统计词频矩阵,先训练,后转换,再转数组 transfer.fit(comment_list) # x的格式: [[第1条评论的切词分布, 有就是1, 没有就是0], [第2条评论的切词分布, 有就是1, 没有就是0], ...] x=transfer.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_train=x[:10] y_train=y[:10] x_test=x[10:] y_test=y[10:] #3.特征工程 #4.模型训练 estimator=MultinomialNB()#创建朴素贝叶斯模型对象 estimator.fit(x_train,y_train)#训练模型 #5.预测模型 y_predict=estimator.predict(x_test) print(f'预测结果:{y_predict}') # 6. 模型评估. print(f'准确率: {accuracy_score(y_test, y_predict)}')''' 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,y=make_blobs(n_samples=100,n_features=2,centers=[[-1,-1],[0,0],[1,1],[2,2]],cluster_std=[0.4,0.2,0.3,0.5],random_state=42) # print(x) # print(y) #2.绘制上述的图形 #参1:x轴坐标 参2:y轴坐标 参3:颜色 plt.scatter(x[:,0],x[:,1]) plt.show() #3.创建Kmeans对象 #参1:聚类数量 参2:随机种子 estimator=KMeans(n_clusters=4,random_state=4) #4.模型训练和预测 y_pred=estimator.fit_predict(x) #5.绘制预测结果 #参1:x轴坐标 参2:y轴坐标 参3:预测结果 plt.scatter(x[:,0],x[:,1], c=y_pred) plt.show() #6.评价指标 print(f'评价指标(评分):{calinski_harabasz_score(x,y_pred)}')#越大越好真实值-质心=簇内距离(误差)
开发流程:高内聚,低耦合;自己能搞定的事,就不麻烦别人
SSE越小,说明点越密集,内聚程度越高
''' 案例:基于用户的年收入和消费指数,根据用户的相似性进行聚类 ''' 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.加载数据集 df=pd.read_csv("./datas/customers.csv") #2.定义sse_list,sc_list,记录不同K值的评估效果 sse_list=[] sc_list=[] #抽取特征 x=df.iloc[:,3:5] #3.定义for训练,测试不同K值的评估效果 for k in range(2,20): #3.1创建KMeans模型 estimator=KMeans(n_clusters=k,random_state=23) #3.2训练模型 estimator.fit(x) #模型预测 y_pred=estimator.predict(x) #3.3获取模型的评估效果 sse_value=estimator.inertia_ sc_value=silhouette_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,label="sse") plt.show() plt.figure(figsize=(20, 10)) plt.plot(range(2,20),sc_list,label="sc") plt.show() #2.定义函数,实现:模型训练,模型预测 def dm02_train_predict(): #1.加载数据集 df=pd.read_csv("./datas/customers.csv") #2.抽取特征 x=df.iloc[:,3:5] #3.模型训练,k=5是刚才通过SSE+肘部法,SC轮廓系数 获取出来的 estimator=KMeans(n_clusters=5,max_iter=100,random_state=23) estimator.fit(x) #4.模型预测 y_pred=estimator.predict(x) #5.绘制5个簇的样本点->散点图 plt.scatter(x.values[y_pred==0,0],x.values[y_pred==0,1])#簇0 plt.scatter(x.values[y_pred==1,0],x.values[y_pred==1,1])#簇1 plt.scatter(x.values[y_pred==2,0],x.values[y_pred==2,1])#簇2 plt.scatter(x.values[y_pred==3,0],x.values[y_pred==3,1])#簇3 plt.scatter(x.values[y_pred==4,0],x.values[y_pred==4,1])#簇4 #6.绘制质心->散点图 plt.scatter(estimator.cluster_centers_[:,0],estimator.cluster_centers_[:,1],s=100,c="red",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()