机器学习的基本步骤流程:
1.数据获取
2.数据基本处理
3.特征工程
4.模型训练
5.模型评估
鸢尾花数据集的机器学习整体流程
1.用sklearn获取数据集(数据集获取)
1.获取数据集
sklearn.datasets
1.小数据集
sklearn.datasets.load_*()
从本地获取
2.大数据集
sklearn.datasets.fetch_*()
从网上下载
subset--表示获取的数据集类型(train/test/all)
默认下载训练数据集(train)
2.数据集返回值
返回类型为bunch--字典类型
返回值属性:
data:特征数据数组
target:目标数组
feature_names: 特征名
target_names: 目标名
DESCR: 数据集介绍
3.数据可视化
import seaborn as sns
sns.Implot()
参数:
x, y--具体x/y轴索引值(列名)
data--数据集的具体数据
hue--目标值(列名)
fit_reg--是否进行线性拟合, 默认为True, 英文全称fit regression
2.数据集拆分(数据基本处理)
api:
from sklearn.model_selection import train_test_split()
参数:
x--特征值数据
y--目标值数据
test_size-测试集所占比例(0.2-0.3为宜)
random_state--产生随机数种子, 确保每次划分的结果一致
返回值有四个,顺序为:
1.训练集特征值 x_train
2.测试集特征值 x_test
3.训练集目标值 y_train
4.测试集目标值 y_test
3.特征预处理(特征工程)
1.定义
通过一些转换函数将特征数据转换成更适合算法模型的特征数据过程
2.内容
2.1.归一化
定义:
对原始数据进行变换把数据映射到特定区间内(默认[0,1])
api:
sklearn.proprocessing.MinMaxScaler()
参数:
默认feature_range=(0,1)
总结:
鲁棒性较差(全称:robustness, 就是稳定性较差, 容易收到异常点影响)
因此, 适合传统精确小数据场景(了解即可, 基本用不到)
2.2.标准化
定义:
将原始数据变换为均值为0, 标准差为1, 即标准正态分布的情况
API:
sklearn.proprocessing.StandardScaler()
总结:
相比于归一法, 异常值影响较小
3.调用接口(API)
sklearn.proprocessing
4.K近邻算法(模型训练+模型评估)
1.简介
根据距离最近的n个邻居来判断属于哪一类
2.api:
python包: Scikit-Learn
sklearn.neighbors.KNeighborsClassifier
参数:
k_neighbors: 选择邻居数, 默认为5
algorithm: ("auto","ball_tree","kd_tree","brute")
auto:
默认自动选择合适算法
ball_tree:
特征值维度>20, 查找效率更高
kd_tree:
特征值维度<=20, 查找效率更高
brute:
数据集很简单时, 使用brute
3.距离度量
1.闵可夫斯基距离:
欧式距离
d = Qrt((x1-x2)2+(y1-y2)2, 2)
曼哈顿距离(Manhattan Distance)
d = |x1-x2|+|y1-y2|
切比雪夫(Chebyshev Distance)
d= max(|x1-x2|, |y1-y2|)
缺点:
1.把各个分量单位相同看待
2.没有考虑各个分量分布不同的情况
改进:
标准化(欧式标准化公式)
2.余弦距离公式(Cosine Distance)
3.汉明距离(Hanming Distance)
字符串变换的最小替换次数
4.杰卡德距离(Jaccard Distance)
J(A, B), 通过交并集进行统计
5.马氏距离(Mahalanobis Distance)
基于样本分布的距离
4.k值的选择
k值过小: 模型复杂, 容易过拟合, 受异常点影响大
k值过大: 模型简单, 容易欠拟合, 受样本均衡的影响
当K=n(n为训练集样本个数), 模型不足取, 过于简单, 仅能预测为属于样本最多那一类