一、模型拟合问题

拟合:模型在训练集和测试集上表现情况

欠拟合:模型在训练集,测试集表现都不好。
过拟合:训练集好,测试集不好.

欠拟合产生的原因:模型过于简单
过拟合产的原因:模型太过于复杂、数据不纯、训练数据太少

泛化:模型在新数据集(非训练数据)上的表现好坏的能力。

奥卡姆剃刀原则:给定两个具有相同泛化误差的模型,较简单的模型比较复杂的模型更
可取。

二、开发环境

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)

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐