一、课程学习的核心收获

在本学期的机器学习课程学习中,我系统掌握了决策树、KNN、K-Means三大核心算法的原理与实践方法,同时理解了数据预处理、模型评估、过拟合防控等全流程的机器学习方法论,完成了从理论到代码落地的完整学习闭环。

(一)核心算法的学习与理解

1. 决策树算法
决策树是一种监督学习算法,核心原理是通过信息增益、信息增益比或基尼系数等指标,递归地对特征进行划分,构建出树形的分类/回归模型。它的优势是可解释性强、无需数据归一化,既能处理分类任务也能处理回归任务,在车牌识别、故障诊断等场景中都有广泛应用。
在学习中我掌握了ID3、C4.5、CART三种经典决策树的实现逻辑,同时理解了剪枝(预剪枝、后剪枝)对防止过拟合的作用,能够用scikit-learn库完成决策树模型的训练、调参与可视化。

2. KNN(k近邻)算法
KNN是一种惰性学习的监督分类算法,核心思想是“物以类聚”:对于待预测样本,选取其特征空间中距离最近的k个邻居,以多数邻居的类别作为该样本的预测类别。它的原理简单、实现容易,对数据分布无严格假设,但在大数据集下计算效率较低,对k值的选择、距离度量的选取较为敏感。
课程中我掌握了KNN的距离计算(欧氏距离、曼哈顿距离)、k值调参方法,能够用sklearn.neighbors.KNeighborsClassifier完成分类任务,同时理解了KNN在人脸识别、步态识别等场景的应用逻辑。

3. K-Means算法
K-Means是无监督聚类算法,核心目标是将样本划分为k个簇,使得簇内样本的距离平方和最小。它的流程简单、收敛速度快,适合大规模数据的聚类分析,在用户分群、图像分割等场景中应用广泛。
学习中我掌握了K-Means的迭代流程(初始化簇中心、分配样本、更新簇中心、迭代收敛),理解了k值选择、初始中心对聚类结果的影响,能够用sklearn.cluster.KMeans完成聚类任务,同时掌握了肘部法则、轮廓系数等模型评估方法。

(二)全流程机器学习方法论的掌握

除了算法本身,我还系统学习了机器学习的完整工作流:

 数据预处理:掌握了数据清洗(缺失值、异常值处理)、特征缩放(标准化、归一化)、特征选择、数据编码等方法,理解了预处理对模型效果的决定性作用;

 模型训练与评估:掌握了训练集/测试集划分、交叉验证、准确率/精确率/召回率/F1值(分类任务)、SSE/轮廓系数(聚类任务)等评估指标,能够科学评估模型性能;

 过拟合与欠拟合防控:理解了过拟合(训练集表现好、测试集表现差)与欠拟合的成因,掌握了剪枝、正则化、增加数据、调整模型复杂度等防控方法。


二、AI工具辅助学习的实践案例

在本学期的机器学习课程中,我系统学习了计算机视觉类机器学习任务的通用流程,课堂重点讲解的人脸识别案例为我后续的项目实践提供了清晰的方法论指导。
1. 课堂案例:人脸识别的实现逻辑
课堂上的人脸识别项目,完整展示了计算机视觉任务的核心范式:
目标检测阶段:通过 Haar 级联分类器或 HOG 特征,在图像中定位人脸区域,排除背景干扰;
特征提取阶段:利用 LBP 或 Eigenfaces 算法,提取人脸的关键特征点与纹理信息;
分类识别阶段:通过 SVM 或简单神经网络,将提取到的特征与数据库中的人脸特征进行比对,输出对应的身份信息。
这个案例让我深刻理解了「定位 - 特征提取 - 分类 / 识别」这一机器学习通用流程,也为我后续自主设计车牌识别项目提供了清晰的框架参考。
2. 自主实践:车牌识别项目的设计思路
结合课堂所学,我自主设计并实现了一套车牌识别系统,其核心流程与人脸识别高度同源,但针对车牌场景做了针对性优化:
车牌定位:利用 OpenCV 的边缘检测与轮廓检测,筛选出符合车牌标准长宽比的四边形区域;
图像预处理:对车牌区域进行灰度化、高斯去噪、二值化处理,消除光照、污渍带来的干扰;
字符识别:通过 Tesseract-OCR 引擎识别车牌字符,输出最终的车牌号码

pip install opencv-python numpy pytesseract
# Windows用户额外安装Tesseract-OCR:https://github.com/UB-Mannheim/tesseract/wiki
import cv2
import numpy as np
import pytesseract

# Windows用户需配置Tesseract路径
# pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

def license_plate_recognition(image_path):
    """车牌识别完整实现"""
    # 1. 读取并预处理图像
    img = cv2.imread(image_path)
    img = cv2.resize(img, (640, 480))
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    blur = cv2.GaussianBlur(gray, (5, 5), 0)
    edged = cv2.Canny(blur, 50, 150)

    # 2. 车牌定位:轮廓检测筛选四边形
    contours, _ = cv2.findContours(edged.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    contours = sorted(contours, key=cv2.contourArea, reverse=True)[:10]
    plate_contour = None

    for c in contours:
        peri = cv2.arcLength(c, True)
        approx = cv2.approxPolyDP(c,  0.02 * peri, True)
        if len(approx) == 4:
            plate_contour = approx
            break

    if plate_contour is None:
        return img, "未检测到车牌"

    # 3. 提取车牌区域
    mask = np.zeros(gray.shape, np.uint8)
    cv2.drawContours(mask, [plate_contour], 0, 255, -1)
    (x, y) = np.where(mask == 255)
    (topx, topy) = (np.min(x), np.min(y))
    (bottomx, bottomy) = (np.max(x), np.max(y))
    plate = gray[topx:bottomx+1, topy:bottomy+1]

    # 4. 字符识别:二值化+OCR
    _, thresh = cv2.threshold(plate, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
    plate_text = pytesseract.image_to_string(thresh, config=r'--oem 3 --psm 8')
    plate_text = plate_text.strip().replace(" ", "")

    # 5. 结果可视化
    cv2.rectangle(img, (topy, topx), (bottomy, bottomx), (0, 255, 0), 2)
    cv2.putText(img, plate_text, (topy, topx-10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)

    return img, plate_text

# 主函数:运行与结果展示
if __name__ == "__main__":
    # 替换为你的车牌图片路径
    image_path = "car_plate.jpg"
    result_img, plate_num = license_plate_recognition(image_path)

    print(f"识别到的车牌号码:{plate_num}")
    cv2.imshow("车牌识别结果", result_img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

三、课堂案例与自主项目的对比分析

为了更清晰地体现课程学习效果,将课堂人脸识别案例与自主车牌识别项目进行了对比:

表格

对比维度 课堂案例:人脸识别 自主项目:车牌识别
任务目标 识别人脸并匹配身份信息 识别车牌区域并读取字符信息
定位方式 Haar 级联 / 关键点检测 轮廓检测 + 形状筛选(四边形)
特征提取 HOG/LBP 人脸纹理特征 边缘特征 + 字符轮廓特征
识别方法 特征匹配 / 分类器比对 OCR 字符识别
应用场景 身份验证、门禁系统 交通监控、停车场管理

可以看到,两个项目的核心流程完全一致,仅在针对目标对象的处理方式上存在差异,这也印证了课程中讲解的机器学习任务通用范式的普适性。


四、项目反思与课程学习总结

1. 项目效果与不足

本次实现的车牌识别系统,在光照充足、车牌清晰的场景下识别效果良好,但仍存在一些局限性:

  • 对倾斜、模糊、被遮挡的车牌识别效果较差;
  • 依赖 Tesseract 通用 OCR 引擎,对中文车牌汉字的识别准确率较低;
  • 传统轮廓检测方法在复杂背景下容易误检。

2. 优化改进方向

结合课程所学,后续可以从以下方面优化项目:

  1. 引入YOLO 目标检测模型替代传统轮廓检测,提升复杂场景下车牌定位的准确率;
  2. 训练针对车牌字符的自定义 CNN 分类器,替代通用 OCR,提升字符识别精度;
  3. 加入倾斜校正、光照补偿等预处理模块,增强系统的鲁棒性。

3. 课程学习收获

通过本课程的学习与本次自主项目实践,我不仅掌握了机器学习项目从需求分析、流程设计到代码实现的完整过程,更深刻理解了「算法为场景服务」的核心思想:课堂上的通用流程需要根据具体任务场景进行针对性优化,才能真正解决实际问题。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐