KNN实现数据分类

knn【K-Nearest-Neighbors】算法是机器学习中很常见的一个算法,主要用于数据分类,属于有监督学习。

knn算法核心思想

  • 百度的解释
  •  如果一个样本在特征空间中的K个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别
    
  • 自己的理解
  •  从k众心理,即找到离自己最近的k个数据,选择其中大多数数据所属类别,那么自己也属于这个类别
    

knn算法demo【python手写实现iris数据集分类】

from sklearn import datasets
from sklearn.model_selection import train_test_split
import numpy as np
from collections import Counter

iris = datasets.load_iris()
x = iris.data
y = iris.target

x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=40, test_size=0.3)
#设置random_state是为了固定每次的训练数据和测试数据
#设置test_size是为了控制训练集和测试集的比例

def eucli_dis(d1, d2):
    '''
    :param d1: 第一个样本数据
    :param d2: 第二个样本数据
    :return: 两个样本数据之间的欧氏距离
    '''
    return np.sqrt(np.sum(pow(d1 - d2, 2)))

def knn_cluster(x_train, y_train, x_test, k):
    '''
    :param x_train: 训练集特征
    :param y_train: 训练集标签
    :param x_test: 测试样本
    :param K: 选择的邻居数目
    :return: 样本数据的分类结果
    '''
    dis = [eucli_dis(x, x_test) for x in x_train]
    #找到最近邻k个数据的索引
    knn_index = np.argsort(dis)[:k]
    y = y_train[knn_index]
    return Counter(y).most_common(1)[0][0]

y_predict = [knn_cluster(x_train, y_train, x, k=3) for x in x_test]
predict_right = np.count_nonzero((y_predict==y_test)==True)
print('y_test ground true:')
print(y_test)
print('y_test prediction:')
print(y_predict)
print('Prediction Accuracy: {:.2f}'.format(predict_right / len(x_test)))

python实现数据可视化

import matplotlib.pyplot as plt
import pandas as pd
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='3d')
colms = pd.DataFrame(data=iris.data, columns=iris.feature_names)
colms['target'] = y
print(colms)
iris_0 = colms[colms['target'] == 0].values
iris_1 = colms[colms['target'] == 1].values
iris_2 = colms[colms['target'] == 2].values
ax.scatter(iris_0[:, 0], iris_0[:, 1], iris_0[:, 2], label='sepal length')
ax.scatter(iris_1[:, 0], iris_1[:, 1], iris_1[:, 2], label='sepal width')
ax.scatter(iris_2[:, 0], iris_2[:, 1], iris_2[:, 2], label='petal length')

plt.legend()
plt.show()

在这里插入图片描述

对超参数k的思考

  • K值的设定
  •  此处实现的代码中K值是人为设定的,具有主观性
    
  • K值对实验结果的影响
  •  对于二分类来说,K值一般设置成奇数,防止TIE
    
  •  对于多分类来说,K值一般从1开始try,但是时间消耗很大
    

knn算法优缺点分析

  • 优点
  •  实现起来特别简单,对于小样本数据准确率较高
    
  • 缺点
  •  效率低
    
  •  对训练集依赖度过高
    
  •  对于高纬度数据处理不友好,容易陷入维数灾难
    
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
KNN(k-最近邻算法)是一种用于分类和回归的机器学习算法,可以应用于股票数据的训练。 首先,我们需要选择一个适当的特征集。在股票数据中,可以考虑使用一些常见的特征,如开盘价、收盘价、最高价、最低价、成交量等。这些特征能够反映股票的价格和交易活跃度。 接下来,我们需要选择一个合适的距离度量方法。在kNN算法中,常用的距离度量方法有欧氏距离、曼哈顿距离和闵可夫斯基距离等。根据具体情况选择合适的距离度量方法。 然后,我们需要将数据集划分为训练集和测试集。通常,我们将大部分数据作为训练集,用于构建kNN模型,然后使用测试集评估模型的性能。确保测试集与训练集是相互独立的,以避免模型过拟合。 接下来,我们可以使用kNN算法进行模型训练。对于给定的测试样本,kNN算法将计算该样本与训练集中所有样本的距离,并选择距离最近的k个样本作为邻居。然后,评估这些邻居的类别(对于分类问题)或目标数值(对于回归问题),并将它们的平均值或众数作为最终预测结果。 最后,我们可以使用一些评估指标(如准确率、召回率、均方误差等)来评估模型的性能。在股票数据中,我们可以使用这些指标来评估kNN模型的预测准确度、稳定性和泛化能力。 需要注意的是,kNN算法在处理股票数据时存在一些挑战,如时间序列的相关性、噪声和非线性关系等。因此,我们可能需要对数据进行特征工程、数据清洗和降维等预处理步骤,以提高模型的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值