发表自话题:k曲线怎么看
分类问题:根据已知样本的某些特征,判断一个未知样本属于哪种样本类别。
与回归问题相比,分类问题的输出结果是离散值,用于指定输入的样本数据属于哪个类别。
K近邻(k-Nearest Neighbor,KNN)算法,是处理分类问题的基本算法之一。
KNN算法可以理解为:如果在未知类别样本附近的k个最近的样本中,大多数都属于某个类别,则这个未知样本也可以视为属于这个类别,即物以类聚,人以群分。
训练数据集是已经被正确分类的样本数据集合,每个样本数据都有表示类别的标签,因此K近邻算法属于监督学习。
1.2.3 近邻 - 欧氏距离K近邻算法中的近邻是通过不同特征值之间的距离进行判断的,一般采用欧氏距离。
二维空间,即只考虑2个特征时
d
(
x
,
y
)
=
(
x
1
−
y
1
)
2
+
(
x
2
−
y
2
)
2
d(x, y)=\sqrt{(x_1-y_1)^2+(x_2-y_2)^2}
d(x,y)=(x1−y1)2+(x2−y2)2
n维空间,即考虑n个特征时
d
(
x
,
y
)
=
(
x
1
−
y
1
)
2
+
(
x
2
−
y
2
)
2
+
.
.
.
+
(
x
n
−
y
n
)
2
=
∑
i
=
1
n
(
x
i
−
y
i
)
2
d(x, y)=\sqrt{(x_1-y_1)^2+(x_2-y_2)^2+...+(x_n-y_n)^2}=\sqrt{\sum_{i=1}^n (x_i-y_i)^2}
d(x,y)=(x1−y1)2+(x2−y2)2+...+(xn−yn)2
=i=1∑n(xi−yi)2
k值用于指定KNN算法中距离输入实例最近的实例数量。
k值的大小会影响KNN算法的输出结果。
超参数
如果模型中的某些参数发生变化时,会对分类或回归的结果产生影响,则这些参数就称为模型的超参数。
k值是KNN算法模型中是超参数。
以上图为例,输入的待分类数据用绿色圆表示,已正确分类的样本数据分别用蓝色方块和红色三角表示,目标是判断绿色圆是属于蓝色方块类别还是属于红色三角类别。
数据集包含2个特征:影片出现的打斗场景次数与接吻场景次数。
目标值为电影的分类:动作片、爱情片、喜剧片等。
基于KNN算法,使用电影数据集对模型进行训练。
from sklearn.neighbors import KNeighborsClassifier feature = df[['Action Lens', 'Love Lens']] target = df['target'] # 实例化分类器 knn = KNeighborsClassifier(n_neighbors=3) # 训练模型 knn.fit(feature, target)输入未知类型的电影数据,使用模型对其进行分类。
knn.predict([[30, 55]]) ''' array(['Love'], dtype=object) '''模型做出判断,一个打斗场景出现30次,接吻场景出现55次的电影属于爱情片。
数据集使用sklearn提供的的IRIS(鸢尾花)数据集。
IRIS数据集包含4个特征:
特征值均为正浮点数,单位为厘米。
目标值为鸢尾花的分类,包括
加载鸢尾花数据集。
import pandas as pd from sklearn.datasets import load_iris from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import train_test_split iris = load_iris() # 加载鸢尾花数据 feature = iris.data target = iris.target feature.shape # (150, 4)将数据集拆分成训练集和测试集。
x_train, x_test, y_train, y_test = train_test_split(feature, target, test_size=0.2, random_state=2020) x_train.shape # (120, 4) x_test.shape # (30, 4)观察数据集,判断是否需要进行特征工程处理。
数据中各个特征的量级相差不大,不需要进行特征工程处理。
基于KNN算法,使用训练集对模型进行训练,模型中的k值设为5。
knn = KNeighborsClassifier(n_neighbors=5) knn.fit(x_train, y_train)使用测试集对模型进行评估。
# 分类的正确率 knn.score(x_test, y_test) # 0.9 # 获取估计器的参数 knn.get_params() ''' {'algorithm': 'auto', 'leaf_size': 30, 'metric': 'minkowski', 'metric_params': None, 'n_jobs': None, 'n_neighbors': 5, 'p': 2, 'weights': 'uniform'} '''查看模型对测试集的分类结果,并与测试集的实际分类进行比较。
print('模型的分类结果:', knn.predict(x_test)) print('实际的类别标签:', y_test) ''' 模型的分类结果: [2 0 1 1 1 1 2 1 0 0 2 1 0 2 2 0 1 1 2 0 0 2 2 0 2 1 1 1 0 0] 实际的类别标签: [2 0 1 1 1 2 2 1 0 0 2 2 0 2 2 0 1 1 2 0 0 2 1 0 2 1 1 1 0 0] '''2021-05-31
2021-07-19
2021-10-10
2021-05-20
2021-06-01
真正的极品选股器—87.5%胜率的神奇牛百,测评结果+神奇九转幅图
2021-10-27
2021-10-27
vue 使用TradingView制作K线图(模仿火币)详解
2021-06-20
2021-06-01
2021-09-23