机器学习Day01

算法:偏抽象的概念,是计算机解决问题的步骤和流程。

模型:偏具体的概念,用代码去实现某一个算法!

数学本质:

        y = f(x)

        x:是样本的特征

        y:是样本的标签

        把x映射为y

机器学习的项目流程

Step1:项目分析

先关注外部特性:

输入是什么?

输出是什么?

        分类项目?

        回归项目?

Step2:数据收集

根据输入和输出,构建数据集

本质上:数理统计问题

                采集总体的一个样本集,通过样本集的统计量来估计总体的统计量。

        分层采样

        结构化数据:成行成列

        每行一个样本:

                独立同分布

        每列一个特征:

                独立的

        离散型变量:

                不同的状态值

                高/低

        连续性变量:

                长度、深度等程度问题

Step3:数据的预处理

数据清洗:

        重复值

        缺失值

        异常值

        无效特征

数据切分:

        训练集:训练过程中,用来训练模型(模型的学习对象)

        验证集:在训练过程中,用来验证模型的效果(不参与学习过程)

        测试集:训练完成后,用来评估模型的效果(不参与学习过程)

        在实际工作中,经常把验证集和测试集合并,一起使用

预处理:

        中心化

        归一化

        标准化

Step4:选择一个模型,完成X到Y的映射

分类问题:预测的标签是一个离散型的变量

        逻辑回归

        KNN

        朴素贝叶斯

        支持向量机

        决策树

        集成学习

回归问题:预测的是一个连续性变量

        线性回归

        KNN

        支持向量机

        决策树

        集成学习

Step5:训练模型

把训练集的特征X_train和标签y_train给模型的fit方法,进行训练,这个过程,就是学习的过程.

本质:

        学习的过程

        学习如何把X映射为Y

Step6:评估模型

        分类问题:

                准确率:accuracy

                召回率:recall

                精准率:precision

                F1-score

        回归问题:

                MAE:平均绝对误差

                MSE:平均平方误差

Step7:保存和部署模型

        保存:把模型保存到文件中

                Pickle

                Joblib

                        dump

        部署:反序列化模型

                Pickle

                Joblib

                        load

        一般load真数据,make假数据

KNN算法

"""
Step1:项目分析
"""
"""
    鸢尾花识别
        iris
        项目需求:鸢尾花有3个子品种,想通过机器学习算法来做分类预测
        进一步思考:
            给定一多花,让模型来识别到底是哪个子品种
            输入:一朵花
                一朵花是不能直接输入计算机中
                特征工程:
                    数字化转型
                    抽取/构建跟这朵花的类别有关系的特征来代表这朵花
                        跟业务专家详细的咨询:
                            花萼长度 x1
                            花萼宽度 x2
                            花瓣长度 x3
                            花瓣宽度 x4

            输出:子品种
                分类问题:
                    对状态进行编码:
                        N个状态:
                            0,...,N-1
                        需求里有3个子品种,也就是有3个类别:
                            0
                            1
                            2
    """


"""
Step2:加载数据
"""
#构建数据集,从sklearn的datasets数据集包下,引入load_iris的数据集,load鸢尾花的真实数据集
from sklearn.datasets import load_iris
X, y = load_iris(return_X_y=True) #一般将二维数据X大写,y一维数据小写
# [sample_size,num_features]
X.shape
#[sample_labels]
y.shape


"""
Step3:切分数据
"""
from sklearn.model_selection import train_test_split  #train_test_split函数将数据切分为2部分,一部分用来训练学习,一部分用来测试
"""
    X:是二维矩阵,特征;
    y:是一维的向量;
    test_size:测试集的大小,值是浮点数的时候表示按比例来算,比如0.2为20%作为测试集,80%作为训练集;
    random_state:在划分的时候,是需要打乱样本顺序,在抽样、打乱的时候规则一样,防止出现不一样的数据,所以随便给个整数值即可。
    切分的时候,先切分X,直接往回返即可。将X和y分别切分为两部分。

    """
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=0)
# print(X_train.shape)
# print(X_test.shape)
# print(y_train.shape)
# print(y_test.shape)


"""
Step4:套用模型
"""
"""
注意基本的命名规范:
    1、函数都是动作,动作性质,一般使用动宾结构、动词短语结构,且字母全都小写,用下划线隔开;比如train_test_split,训练集测试集分割。
    2、类用名词,使用大驼峰命名方法,单词全挨在一起写,首字母大写; 比如KNeighborsClassifier。
    3、库和包的名字都是小写;比如sklearn.neighbors
"""
from sklearn.neighbors import KNeighborsClassifier
#实例化对象
knn = KNeighborsClassifier()
#训练模型
knn.fit(X_train,y_train)
#模型预测
y_pred = knn.predict(X = X_test)
print(y_pred) #预测结果
print(y_test) #真实结果


"""
Step5:评估模型
"""
"""
acc准确率:
    1. 使用‘y_test == y_pred’来判断里面的每一个元素是否相等,相等返回True,不等返回False。
    2. 由于True的值为1,False的值为0,所以可以将所有的值相加,再除以总个数,即可算出acc准确率。
    3. 将所有值相加除以总数的过程,就是求平均值的过程,所以使用mean()方法求平均值即可。
"""
acc = (y_test == y_pred).mean()
print(acc)


"""
Step6:模型的保存和加载
"""
import joblib #joblib用来进行序列化
joblib.dump(value=knn,filename='knn.model') #模型的保存

#将来要使用的时候,可以再将模型加载
model = joblib.load(filename='knn.model')

  • 25
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值