算法:偏抽象的概念,是计算机解决问题的步骤和流程。
模型:偏具体的概念,用代码去实现某一个算法!
数学本质:
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')