机器学习7:朴素贝叶斯、情感分类案例、聚类算法、Kmeans实现流程、模型评估方法、案例顾客数据聚类分析法

朴素贝叶斯算法介绍

朴素贝叶斯的"朴素"之处在于假设特征(属性)之间是相互独立的,而不是样本之间

朴素贝叶斯情感分类案例

pip install jieba->jieba分词器,可以切词,删除无效词

python 复制代码
'''
案例:
     演示通过朴素贝叶斯算法 实现 商品评论情感分析,即:好评,差评...
朴素贝叶斯介绍:
    概述:
        贝叶斯:仅仅依赖 概率 就可以进行分类的 一种机器学习算法
        朴素:不考虑特征之间的关联性,即:特征间都是相互独立的
             原始: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)}')

聚类算法简介

聚类算法API的使用

python 复制代码
'''
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)}')#越大越好

Kmeans实现流程

模型评估方法

误差平方和SSE

真实值-质心=簇内距离(误差)

开发流程:高内聚,低耦合;自己能搞定的事,就不麻烦别人

SSE越小,说明点越密集,内聚程度越高

SC轮廓系数法

CH轮廓系数法

案例顾客数据聚类分析法

python 复制代码
'''
案例:基于用户的年收入和消费指数,根据用户的相似性进行聚类
'''
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()
相关推荐
sinat_286945191 小时前
LLM Serving 中的四种缓存
人工智能·缓存·chatgpt
阿明副业观察1 小时前
AI视频创作流程怎么做?完整指南与工具推荐
大数据·人工智能·aigc·音视频·ai写作
EatFan1 小时前
「失控AI智能体」首遭FTC立案:英伟达Agent安全体系落地,AI智能体合规设计如何前置
大数据·人工智能·安全·ai智能体·mcp·agent安全·ftc
挖掘狂人1 小时前
把 AI Agent 养在自己电脑上:从本地部署到远程接管的一份完整思路
人工智能·开源·ai编程
波尔德1 小时前
Origin 2024 绘制钟形正态分布曲线:填充颜色并导出透明 PNG
人工智能·算法
迷路爸爸1801 小时前
梯度消失和梯度爆炸
人工智能·深度学习·机器学习
狂野小白兔1 小时前
AI游戏制作00——AI制作游戏需要准备的前置条件
人工智能·游戏
龙亘川1 小时前
体育赛事多域融合|助推文体旅高质量发展
人工智能·智慧城市·开源软件·数据可视化
AI日报派送佬1 小时前
2026年10月5日AI行业日报|中美模型差距缩至3%,物理AI百亿估值爆发,决策模型国产开源竞速
人工智能·openai·ai智能体·ai日报·物理ai·算力基建·ai商业化