初识机器学习 | 1.用代码打开AI的大门

本文介绍了机器学习的基本概念,包括有监督学习和无监督学习,重点讲解了K-近邻算法(KNN)的工作原理及应用。通过Python代码示例,演示了如何使用sklearn库对鸢尾花数据集进行分类,以及如何通过网格搜索优化KNN模型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是机器学习

机器学习是从数据中自动分析获得模型,并利用模型对未知的数据进行预测。其中

数据集构成:特征值 + 目标值。

监督学习

有目标值。输入数据由输入特征值与目标值组成。函数输出一个连续的值(称为回归),或是输出有线个离散值(称为归类)。

  • 回归:线性回归、岭回归
  • 分类:k-近邻算法、贝叶斯分类、决策树、随机森林、逻辑回归

无监督学习

无目标值。输入数据只有特征值。

聚类:K-means

KNN

K-近邻算法(KNN):如果一个样本在特征空间中k个最相似(即特征空间中最邻近)的样本中大多数属于某一个类别,则该样本也属于这个类别。其中距离公式有三种:

  • 欧式距离
  • 曼哈顿距离
  • 明科夫斯基距离
# -*- coding: utf-8 -*-
# @File  : knn_iris.py
# @Author: clelandgt@163.com
# @Date  : 2019-11-07
# @Desc  :
""" iris数据集介绍
iris数据集时常用分类实验数据集,由Fisher 1936年搜集整理。Iris也称鸢尾花数据集,是一类多重变量分析的数据集。数据集介绍:
属性数量:4(数值型,数值型,帮助预测的属性和类)
实例数量:150(三类各有50个)
    - sepal length 萼片长度(厘米)
    - sepal width 萼片宽度(厘米)
    - petal length 花瓣长度(厘米)
    - petal width 花瓣宽度(厘米)

类别:
    - lris-Setosa 山鸢尾
    - lris-Vericolour 变色鸢尾
    - lris-Virginca 维吉尼亚鸢尾
"""
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import GridSearchCV


def knn_iris():
    """
    使用KNN算法对鸢尾花进行分类
    :return:
    """
    # 1.获取数据
    iris = load_iris()

    # 2.数据集划分
    x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target)
    print("Data: \n", x_train)

    # 3.特征工程:标准化
    transformer = StandardScaler()
    train_data = transformer.fit_transform(x_train)
    test_data = transformer.fit_transform(x_test)
    print("Preprocessing: \n", train_data)

    # 4.KNN算法预估器
    estimator = KNeighborsClassifier()
    estimator.fit(train_data, y_train)
    print("Predict: \n", estimator.predict(train_data))
    print("Target: \n", y_train)

    # 5.模型评估
    print('Train score: \n', estimator.score(train_data, y_train))
    print('Test score: \n', estimator.score(test_data, y_test))


def knn_iris_grid():
    """
    使用KNN算法对鸢尾花进行分类. 调优方法使用:网格搜索
    :return:
    """
    # 1.获取数据
    iris = load_iris()

    # 2.数据集划分
    x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target)
    print("Data: \n", x_train)

    # 3.特征工程:标准化
    transformer = StandardScaler()
    train_data = transformer.fit_transform(x_train)
    test_data = transformer.fit_transform(x_test)
    print("Preprocessing: \n", train_data)

    # 4.KNN算法预估器
    estimator = KNeighborsClassifier()
    param_dict = {'n_neighbors': [1, 3, 5, 7, 9, 11]}
    estimator = GridSearchCV(estimator, param_grid=param_dict, cv=10)
    estimator.fit(train_data, y_train)

    # 5.模型评估
    print('Train score: \n', estimator.score(train_data, y_train))
    print('Test score: \n', estimator.score(test_data, y_test))

    # 最佳参数
    print(u'最佳参数: \n', estimator.best_params_)
    # 最佳结果
    print(u'结果: \n', estimator.best_score_)
    # 最佳估计器
    print(u'估计器: \n', estimator.best_estimator_)
    # 交叉验证结果
    print(u'估计器: \n', estimator.cv_results_)


def main():
    # KNN算法对鸢尾花进行分类
    # knn_iris()

    # KNN算法对鸢尾花进行分类,模型优化
    knn_iris_grid()


if __name__ == '__main__':
    main()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值