概念&基础
流程:
fit就是拟合
分类任务:
二分类:不是0就是1
多分类:数字识别、图像识别、风险评级
多标签分类:多种类型进行归类
回归任务: 结果是一个连续数字的值,而非一个类别。
监督学习: 给机器的训练数据拥有“标记”或者“答案”。一般用于分类、回归
非监督学习: 给机器的训练数据没有“标记”或者“答案”。一般用于聚类分析、降维、异常检测
半监督学习: 一部分数据有答案,另一部分数据没有。先用非监督学习对数据进行处理,再用监督学习进行训练和预测
增强学习: 根据周围环境的情况,采取行动,根据采取行动的结果,学习行为方式。
欠拟合: 不能完整表述数据关系
过拟合: 过多的表达了数据间的噪音关系
Numpy
import numpy as np
np.array np.dtype np.zeros np.full np.arange np.linspace
np.random.randint np.random.seed np.random.random() np.random.normal()
axis(0指行,1指列)
# 合并拼接
np.concatenate([x,y])
np.vstack([x,y]) np.hstack([x,y])
# 分割
np.split() np.vsplit() np.hsplit()
# 运算
A.dot(B) 乘积
A.T 转置
np.tile() 堆叠
np.linalg.inv() 矩阵的逆
np.linalg.pinv() 伪逆矩阵
np.sum() .min() .max() .prod()乘积 .mean() .median() .percentile()百分位
np.var()方差 .std()标准差
# 索引
np.argmin() 最小值索引 argsort() 元素索引
np.shuffle() 打乱顺序 np.sort()
np.partition() argpartition()
# fancy indexing
np.count_nonzero() np.any() np.all()
Matplotlib
import matplotlib.pyplot as plt
# 折线图
plt.plot(x,y,color="颜色",linestyle="线性",label="图示")
plt.show()
plt.xlim() ylim() xy轴的范围
plt.axis([x0,x1,y0,y1]) 调节xy轴的范围
plt.xlabel() ylabel() xy标签
plt.legrnd() 显示图例
plt.title() 标题
# 散点图
plt.scatter(x,y,alpha="透明度")
#bar 条形图
plt.bar()
# 直方图
plt.hist()
数据预处理
数据归一化
数据分布没有明显边界:均值归一化(StandardScaler)
数据分布有明显边界:最值归一化(MinMaxScaler)
StandardScaler
# 测试集必须使用训练集的均值和方差,即 standardScalar.fit(X_train) 后的数据
from sklearn.preprocessing import StandardScaler
standardScalar = StandardScaler()
standardScalar.fit(X_train)
standardScalar.mean_ 均值
standardScalar.scale_ 方差
standardScalar.transform(X_train) 归一化
MinMaxScaler
from sklearn.preprocessing import MinMaxScaler
minmaxscaler = MinMaxScaler()
minmaxscaler.fit(X_train)
X_train = minmaxscaler.transform(X_train)
X_test_standard = minmaxscaler.transform(X_test)
kNeighbors = KNeighborsClassifier(n_neighbors=3)
kNeighbors.fit(X_train,y_train)
kNeighbors.score(X_test_standard, y_test)
KNN
附近最近的k个点,解决分类问题,1最好,0最差
需要对数据进行归一化处理
缺点:维数灾难、不可解释、容易受异常值的影响
距离计算方式:欧拉距离、曼哈顿距离、明可夫斯基距离-------具体算法自行百度
KNeighborsClassifier 超参数
参数:
n_neighbors: int, 可选参数(默认为 5),查询的默认邻居的数量
weights(权重): str or callable(自定义类型), 可选参数(默认为 ‘uniform’)
用于预测的权重函数。可选参数如下:
- ‘uniform’ : 统一的权重,就是比较个数占比
- ‘distance’ : 权重点等于他们距离的倒数。就是比较距离的倒数,选择更近的
- [callable] : 自定义的方法
algorithm(算法): {‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’}, 可选参数(默认为 'auto')
leaf_size(叶子数量): int, 可选参数(默认为 30)
传入BallTree或者KDTree算法的叶子数量。此参数会影响构建、查询BallTree或者KDTree的速度,以及存储BallTree或者KDTree所需要的内存大小。 此可选参数根据是否是问题所需选择性使用。
p: integer, 可选参数(默认为 2),距离算法的选择,1是曼哈顿距离,2是欧拉距离,其它是明可夫斯基距离
metric(矩阵): string or callable, 默认为 ‘minkowski’,用于树的距离矩阵
metric_params(矩阵参数): dict, 可选参数(默认为 None),给矩阵方法使用的其他的关键词参数。
n_jobs: int, 可选参数(默认为 1)
用于搜索邻居的,可并行运行的任务数量。如果为-1, 任务数量设置为CPU核的数量。
基本应用
from sklearn.neighbors import KNeighborsClassifier
kNN_classifier = KNeighborsClassifier(n_neighbors=6)
kNN_classifier.fit(X_train, y_train)
score = kNN_classifier.score(X_test,y_test)
y_pred = kNN_classifier