一、机器学习核心认知

1.1 什么是机器学习

机器学习是让计算机从数据中学习规律,进而对未知数据做出决策或预测的技术。其核心流程为:数据采集→数据预处理→模型训练→模型评估→模型部署;核心内涵是 “从经验中学习”;三要素为数据、模型、算法

1.2 机器学习的常见类型与问题

  • 常见类型:监督学习、半监督学习、无监督学习、强化学习、迁移学习
  • 四类核心问题:分类(如情感分析)、回归、聚类、推荐(本文聚焦分类问题,以情感分析为例)

二、实战准备:评论数据预处理(词袋模型)

情感分析的第一步是将文本转化为机器可识别的向量,这里采用词袋模型(BOW),忽略词序仅关注词的存在与否。

代码如下:

import jieba
import time
import csv
import numpy as np

#读取随机抽取的10000条评论的文本数据(前5000条好评,后5000条差评)
content = open('data.txt','rb')
#建立停用词词典
punctuation = stopwords = set()
stopwords = [line.strip() for line in open('ting.txt','r',encoding='utf-8').readlines()]
punctuation.update(stopwords)
#去除停用词
seg_1 = [jieba.lcut(con) for con in content]
tokenized = []
for sentence in seg_1:
    words = []
    for word in sentence:
        if word not in punctuation:
            words.append(word)
    tokenized.append(words)
#忽略词之间的联系,建立集合词典
BOW = [x for item in seg_1 for x in item if x not in punctuation]
BOW = list(set(BOW))
print(len(BOW))  #显示词典长度,即向量维度
#for语句建立词袋模型,只包含1和0
bag_of_word2vec = []
for sentence in tokenized:
    token = [1 if token in sentence else 0 for token in BOW]
    bag_of_word2vec.append(token)
print(len(bag_of_word2vec))#对比评论数量
#存储文本向量
fw = open('data.csv','w',encoding='utf-8')
csv_writer = csv.writer(fw,dialect="excel")
for item in bag_of_word2vec:
    csv_writer.writerow(item)
    time.sleep(0.01)

#调用pandas库
import pandas as pd
#打开、分析并读取提供的csv文件,并将数据存储在DataFrame中
data = pd.read_csv('data.csv',header=None)
#展示DataFrame
print(data)

#为前5000条数据打上标签“1”
data.loc[0:4999,'5763'] = 1
#为后5000条数据打上标签“0”
data.loc[5000: 9999,'5763'] = 0
#pandas写入的是浮点类型的数据,将其转化为整数型。
data["5763"] = data["5763"].astype("int")
#将数据存储到data.csv中
data.to_csv('dataset.csv',index = 0,header = 0)
#展示dataFrame
print(data)

代码说明:

  1. 读取 1 万条评论数据(前 5000 好评、后 5000 差评),通过 jieba 分词处理文本;
  2. 加载停用词表,过滤无意义词汇(如 “的”“啊”);
  3. 构建词袋词典,将每条评论转化为 0-1 向量(1 表示词存在,0 表示不存在);
  4. 为向量添加标签(1 = 好评,0 = 差评),存储为 CSV 供后续模型训练。

三、朴素贝叶斯:基于概率的分类算法

3.1 朴素贝叶斯核心原理

朴素贝叶斯以贝叶斯定理为基础,假设特征之间相互独立,通过计算 “某样本属于某类别” 的概率来完成分类。

核心公式:P(Y∣X)=P(X∣Y)P(Y) ​/ P(X)

根据特征类型不同,朴素贝叶斯分为:

  • 伯努利朴素贝叶斯(适用于二值特征,如词袋向量);
  • 高斯朴素贝叶斯(适用于连续特征,如乳腺癌数值特征)。

3.2 简单案例演示

from sklearn.naive_bayes import BernoulliNB
#输入数据
X = (
    [[0,1,0,0],
     [0,0,1,0],
     [0,0,0,1],
     [1,1,0,0],
     [0,1,1,0],
     [0,0,1,1],
     [1,0,0,1],
     [1,0,1,0],
     [0,1,0,1],
     [1,0,1,1]])
Y = (
    [1,0,1,0,0,1,1,1,0,1]
)
model = BernoulliNB()
#训练模型
model.fit(X,Y)
#评估结果
pred_result = model.predict([[1,1,1,1]])
#结果显示  (书中简写了array[1])
print("待预测样本:[1,1,1,1]")
print(f"模型预测结果:{pred_result[0]}")

3.3 乳腺癌数据集实战(高斯朴素贝叶斯)

#乳腺癌数据案例
#从sklearn库中直接导入
from sklearn.datasets import load_breast_cancer
data = load_breast_cancer()
x = data.data
y = data.target
print(x.shape)
print(y.shape)
#加载pandas库,进一步查看特征数据
import pandas as pd
X = pd.DataFrame(data.data,columns=data.feature_names)
print(X)
#X.info()查看
X.info()
#X.describe()获取各特征数据的描述统计值  (书中没有使用print打印)
print(X.describe())
#查看特征与标签的名称
print(data.feature_names)
print(data.target_names)
print(len(data.feature_names))
print(len(data.target_names))

#判断乳腺癌问题,高斯朴素贝叶斯建模
from sklearn.datasets import load_breast_cancer
from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split

data = load_breast_cancer()
x = data.data
y = data.target
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.3,random_state=1)

model =  GaussianNB()
model.fit(x_train,y_train)

train_score =  model.score(x_train,y_train)
test_score = model.score(x_test,y_test)

print("训练集的准确率:%f"%train_score)
print("测试集的准确率:%f"%test_score)

3.4 评论情感分析实战(伯努利朴素贝叶斯)

#对评论数据进行情感分析(本质分类问题)
#导入csv数据
import pandas as pd
from sklearn.naive_bayes import BernoulliNB
from sklearn.model_selection import train_test_split
#导入数据,第一行作为数据而非索引
data = pd.read_csv('comment_1w.csv',header=None)
X = data.iloc[: ,0:600]
X = X.values
y = data.iloc[: ,600]
y = y.values
#划分集合
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3,random_state=1)
#训练模型
model = BernoulliNB()
model.fit(X_train,y_train)
#结果评估
train_score = model.score(X_train,y_train)
test_score = model.score(X_test,y_test)
print("训练集的准确率:%f"%train_score)
print("测试集的准确率:%f"%test_score)

四、逻辑回归:二元分类的经典算法

4.1 Sigmoid 函数(逻辑回归核心)

逻辑回归通过 Sigmoid 函数将线性输出映射到 0-1 区间,实现概率预测:

#二元分类问题(逻辑回归)
#Sigmoid函数表示曲线满足逻辑划分
def sigmoid(z):
    return 1/(1+np.exp(-z))
z = np.arange(-5,5,0.5)
sigmoid(z)
#sigmoid函数(Logistic函数)不错的性质

4.2 乳腺癌数据集逻辑回归实战

#利用逻辑回归进行乳腺癌数据建模
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_breast_cancer
from sklearn import metrics
data = load_breast_cancer()
x = data.data
y = data.target
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.3,random_state=1)
model = LogisticRegression(solver='liblinear')
model.fit(x_train,y_train)
train_score = model.score(x_train,y_train)
test_score = model.score(x_test,y_test)
print("训练集的准确率:%f"%train_score)
print("测试集的准确率:%f"%test_score)

4.3 评论情感分析(逻辑回归版)

#二项逻辑回归算法进行建模
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn import metrics

#导入数据,第一行作为数据而非索引
data = pd.read_csv('comment_1w.csv',hearder=None)
X = data.iloc[: ,0:600]
X = X.values
y = data.iloc[: ,600]
y = y.values

#划分集合
X_train,y_train,X_test,y_test = train_test_split(X,y,test_size=0.3,random_state=1)

#训练模型
model = LogisticRegression(solver='liblinear')
model.fit(X_train,y_train)

#模型评估
train_score = model.score(X_train,y_train)
test_score = model.score(X_test,y_test)
print("训练集的准确率:%f"%train_score)
print("测试集的准确率:%f"%test_score)

五、核心洞察与总结

1. 文本预处理是情感分析的基础:词袋模型是最简单的文本向量化方式,虽忽略词序但能快速落地,适合入门级情感分析;

2. 算法选择要匹配数据特征:

朴素贝叶斯计算高效,适合小样本、高维数据(如文本);

逻辑回归可解释性强,是二元分类的 “基线模型”;

3. 机器学习的本质是 “数据驱动”:无论是乳腺癌诊断还是评论情感分析,模型效果的核心是数据质量(如文本数据的停用词过滤、标签准确性)。

注意事项

1. 运行代码前需确保安装依赖:pip install jieba numpy pandas scikit-learn;

2. 需准备data.txt(评论数据)、ting.txt(停用词表)、comment_1w.csv(预处理后的评论向量);

3. 逻辑回归代码中hearder为笔误(应为header),若运行报错需修正该拼写错误。

更多推荐