day12--k近邻算法KNN

本文深入探讨了K近邻算法的三大核心要素:k值选择、距离度量及分类决策规则。并指出了样本不平衡可能导致的分类偏斜问题,提出了通过赋予不同样本权重的解决方案。此外,还提供了一个Python实现的示例,展示了如何使用k近邻算法进行分类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. k近邻算法的三个基本要素:
  • [ 1] k值的选择
  • [ 2] 距离度量
  • [ 3] 分类决策规则
    2.该算法的问题:该算法在分类时有个主要的不足是,当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的k个邻居中大容量类的样本占多数。
    3.解决:不同的样本给予不同权重项。
    4.对于该算法,做了如下实验:
    #Author:Liu
    import numpy as np
    import operator

def createDataSet():
group = np.array([[1.0,1.1],[1.0,1.0],[0.0,0.0],[0,0.1]])
labels = [‘A’,‘A’,‘B’,‘B’]
return group,labels

def classify(inX,dataSet,labels,k):
dataSetsize = dataSet.shape[0]
diffMat = np.tile(inX,(dataSetsize,1))-dataSet #距离相减
sqDiffMat = diffMat2 #平方
sqDistances = sqDiffMat.sum(axis=1) #对每一行的距离进行求和
distance = sqDistances
0.5 #开根号
sortedDistIndicies = distance.argsort()
classCount = {}
for i in range (k):
voteLabel = labels[sortedDistIndicies[i]]
classCount[voteLabel] = classCount.get(voteLabel,0)+1
sortedClassCount = sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)
return sortedClassCount[0][0]
if name ==‘main’: #写主函数,调用上面写的分类器
group,labels = createDataSet()
test = classify([0.1,0.3],group,labels,3) #输入一个点,判断它的类别
print(test)

#注意:python3以后,都是item(),只有python2里才有iteritems()

K近邻(K-Nearest Neighbors, KNN)是一种常用的监督学习算法,主要用于分类和回归任务。在股票价格预测中,KNN算法可以用于预测未来的股票价格。以下是一个完整的代码示例,展示了如何使用KNN算法进行股票价格预测,并包含数据可视化的步骤。 ```python import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsRegressor from sklearn.metrics import mean_squared_error # 读取股票数据 data = pd.read_csv('stock_data.csv') # 数据预处理 data['Date'] = pd.to_datetime(data['Date']) data.sort_values('Date', inplace=True) data.reset_index(drop=True, inplace=True) # 特征工程 data['Day'] = data['Date'].dt.dayofweek data['Month'] = data['Date'].dt.month data['Year'] = data['Date'].dt.year # 特征选择 features = ['Open', 'High', 'Low', 'Volume', 'Day', 'Month', 'Year'] target = 'Close' X = data[features] y = data[target] # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, shuffle=False) # 训练KNN回归模型 knn = KNeighborsRegressor(n_neighbors=5) knn.fit(X_train, y_train) # 预测 y_pred = knn.predict(X_test) # 模型评估 mse = mean_squared_error(y_test, y_pred) print(f'Mean Squared Error: {mse}') # 可视化结果 plt.figure(figsize=(14, 7)) plt.plot(data['Date'], data['Close'], label='Actual Price') plt.plot(data['Date'].iloc[len(y_train):], y_pred, label='Predicted Price') plt.xlabel('Date') plt.ylabel('Stock Price') plt.title('KNN Stock Price Prediction') plt.legend() plt.show() ``` ### 代码说明: 1. **数据读取与预处理**: - 读取股票数据并按日期排序。 - 将日期列转换为日期时间格式,并提取出星期、月份和年份作为特征。 2. **特征工程**: - 选择开盘价、最高价、最低价、成交量、星期、月份和年份作为特征。 - 目标变量为收盘价。 3. **模型训练与预测**: - 将数据集划分为训练集和测试集。 - 训练KNN回归模型并进行预测。 4. **模型评估与可视化**: - 计算均方误差(MSE)来评估模型性能。 - 使用Matplotlib绘制实际价格和预测价格的对比图。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值