机器学习笔记
一、模型拟合问题
拟合:模型在训练集和测试集上表现情况
欠拟合:模型在训练集,测试集表现都不好。
过拟合:训练集好,测试集不好.
欠拟合产生的原因:模型过于简单
过拟合产的原因:模型太过于复杂、数据不纯、训练数据太少
泛化:模型在新数据集(非训练数据)上的表现好坏的能力。
奥卡姆剃刀原则:给定两个具有相同泛化误差的模型,较简单的模型比较复杂的模型更
可取。
二、开发环境
1.基于Python的scikit-learn库
1.简单高效的数据挖掘和数据分析工具
2.可供大家使用,可在各种环境中重复使用
3.建立在NumPy,SciPy和matplotlib上
4.开源,可商业使用-获取BSD许可证
三、KNN算法
1.K-近邻算法
K-近邻算法(KNearestNeighbor,简称KNN)。比如:根据你的“邻居”来推断出你的类别
KNN算法思想:如果一个样本在特征空间中的k个最相似的样本中的大多数属于某一个类别,则该样本也属于这个类别
样本相似性:样本都是属于一个任务数据集的。样本距离越近则越相似。
欧式距离=对应维度差值平方和,开平方根

二维平面上点a(x1,y2)与b(x2,y2)间的欧氏距离:

三维空间点a(x1,y1,Z1)与b(x2,y2,Z2)间的欧氏距离:

n维空间点a(x11,x12,...,x1n)与b(x21,下x22,...,x2n)间的欧氏距离(两个n维向量):

K值过小:用较小邻域中的训练实例进行预测;容易受到异常点的影响;K值的减小就意味着整体模型变得复杂,容易发生过拟合
K值过大:用较大邻域中的训练实例进行预测;受到样本均衡的问题;且K值的增大就意味着整体的模型变得简单,欠拟合
如何对K超参数进行调优?
需要一些方法来寻找这个最合适的K值:交叉验证、网格搜索
2.KNN算法
1.解决问题:分类问题和回归问题
分类问题和回归问题的相同点:有监督学习--->有特征,有标签。 标签不连续的是分类问题,标签连续的是回归问题
2.算法思想:若一个样本在特征空间中的k个最相似的样本大多数属于某一个类别,则该样本也属于这个类别。
3.相似性:欧式距离
分类流程:
1.计算未知样本到每一个训练样本的距离
2.将训练样本根据距离大小升序排列
3.取出距离最近的K个训练样本
4.进行多数表决,统计K个样本中哪个类别的样本个数最多
5.将未知的样本归属到出现次数最多的类别
回归流程:
1.计算未知样本到每一个训练样本的距离
2.将训练样本根据距离大小升序排列
3.取出距离最近的K个训练样本
4.把这个K个样本的目标值计算其平均值
5.作为将未知的样本预测的值
3.KNN算法分类API
1.分类问题
1)KNN分类API
sklearn. neighbors.KNeighborsClassifier(n_neighbors=5)
n_neighbors:int,可选(默认=5),k_neighbors查询默认使用的邻居数
from sklearn.neighbors import KNeighborsClassifier
def dm01_knnapi_分类():
estimator =KNeighborsClassifier(n_neighbors=1)
x_train=[[0],[1],[2],[3]] #训练集的特征数据
y_train=[0,0, 1, 1] #训练集的标签数据
x_test=[[5]]
estimator.fit(x_train, y_train)
myret = estimator.predict(x_test)
print('myret-->', myret)
2)KNN回归API
sklearn.neighbors.KNeighborsRegressor(n_neighbors=5):
from sklearn.neighbors import KNeighborsRegressor
def dm02_knnapi_回归():
estimator =KNeighborsRegressor(n_neighbors=2)
X=[[0, 0, 1],
[1,1,0],
[3,10, 10],
[4,11,12]]
y=[0.1, 0.2, 0.3, 0.4]
estimator.fit(X, y)
myret = estimator.predict([[3, 11, 10]])
print('myret-->',myret)
更多推荐
所有评论(0)