Python实现---用KNN解决回归问题
KNN用于回归问题
KNN不仅可以用于分类问题,也可以用回归问题。
主要算法思路就是:使用KNN计算某个数据点的预测值时,模型从训练数据集中选择离该数据点最近的k个数据点,并且把这些数据的y值取均值,把求出的这个均值作为新数据点的预测值。
实验数据集
data.csv:
数据是csv格式的,第一行是标签。
python代码实现
以下代码在dataTransform函数里改一下数据集,可以直接在pycharm中运行
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler, StandardScaler# KNN核心算法
def classify(inX, dataSet, y_train, k):m, n = dataSet.shape # shape(m, n)测试集中有m个个体和n个特征# 计算测试数据到每个点的欧式距离distances = []for i in range(m):sum = 0for j in range(n):sum += (inX[j] - dataSet[i][j]) ** 2distances.append(sum ** 0.5)sortDist = sorted(distances) # 得到的是按照distance排序好的# 求k个最近的值的平均值sum = 0 for i in range(k):sum += y_train[distances.index(sortDist[i])]return sum/k# 用于归一化
x_scaler = MinMaxScaler(feature_range=(-1, 1))
y_scaler = MinMaxScaler(feature_range=(-1, 1))# 数据的读取和归一化
def dataTransform():df = pd.read_csv('data.csv', encoding='utf-8')x = df[['AVGACURATE', 'AVGSPEED', 'AVGHEADDIST', 'LIGHTVEH', 'LONGVEH', 'HUGEVEH', 'MIDVEH', 'MINIVEH']]y = df['AVGFLOW']y = y.values.reshape(-1, 1) # 在sklearn中,所有的数据都应该是二维矩阵,所以需要使用.reshape(1,-1)进行转换# 对数据进行最大最小值归一化x = x_scaler.fit_transform(x)y = y_scaler.fit_transform(y)# 训练集x_train = x[0:1000, :] # 二维y_train = y[0:1000]# 测试集x_test = x[1001:1292, :]y_test = y[1001:1292]return x_train, y_train, x_test, y_test# 测试算法
def Test():x_train, y_train, x_test, y_test = dataTransform()predict = [] # 记录预测值err = 0for i in range(len(x_test)): # 对每一个测试数据predict.append(classify(x_test[i], x_train, y_train, 5)) # 返回平均值# print(predict[i], y_test[i])err += np.square(y_test[i]-predict[i]) # 计算误差和mse_err = err/len(x_test)print("the total mse error is: ", mse_err)predict = np.array(predict) # 转成arraydraw(predict, y_test)# 画图函数
def draw(predict, y_test):# 先转化为实际值predict = predict.reshape(-1, 1)predict = y_scaler.inverse_transform(predict)y_test = y_scaler.inverse_transform(y_test)# 解决中文无法显示的问题plt.rcParams['font.sans-serif'] = [u'SimHei']plt.rcParams['axes.unicode_minus'] = Falseplt.figure(figsize=(8, 6))plt.plot(predict, label='pred')plt.plot(y_test, label='actual')plt.title('车流预测_测试集', )plt.legend()plt.show()if __name__ == '__main__':Test()
实验结果
Python实现---用KNN解决回归问题相关推荐
- Python实现K临近法(KNN)回归(村里最笨的小鸡都可以学会)阅读预计20分钟
Python实现K临近法(KNN)回归(村里最笨的小鸡都可以学会)阅读预计20分钟 阅读预计20分钟 K临近法回归介绍 算法(可以跳过) 数据的导入与清洗 简单的例子 复杂的例子 数据以及核心代码 文 ...
- Python机器学习:SVM008SVM思想解决回归问题
怎么定义拟合 比如线性,MSE值最小 SVM margin包含样本数量越多越好~ 取中间的直线为结果 引入超参数ε #SVM思想解决回归问题 import numpy as np import mat ...
- 【机器学习】KNN算法及其用KNN解决字体反爬
KNN算法及其用KNN解决字体反爬 关于KNN算法 概要 简介 原理 KNN算法Python实现 KNN解决字体反爬 web-font介绍 例子 最后 关于KNN算法 概要 K最近邻(kNN,k-Ne ...
- 吴恩达机器学习作业Python实现(二):logistic回归
吴恩达机器学习系列作业目录 1 Logistic regression 在这部分的练习中,你将建立一个逻辑回归模型来预测一个学生是否能进入大学.假设你是一所大学的行政管理人员,你想根据两门考试的结果, ...
- python机器学习库sklearn——岭回归(Ridge、RidgeCV)(L2正则化)
分享一个朋友的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!大家可以看看是否对自己有帮助:点击打开 docker/kubernetes入门视频教程 全栈工程师开发手册 (作者:栾鹏) pyth ...
- 核函数(多项式,高斯核)以及svm解决回归问题
文章目录 一.SVM最优化问题转换 1.多项式核函数 二.高斯核函数 1.引入库 1.多项式特征 2.高斯核函数升维举例 3.高斯核函数超参数gamma 三.svm解决回归问题 总结 一.SVM最优化 ...
- 哪个才是解决回归问题的最佳算法?线性回归、神经网络还是随机森林?
编译 | AI科技大本营 参与 | 王珂凝 编辑 | 明 明 [AI科技大本营导读]现在,不管想解决什么类型的机器学习(ML)问题,都会有各种不同的算法可以供你选择.尽管在一定程度上,一种算法并不能总 ...
- ACMNO.27 Python的两行代码解决 C语言-字符逆序 写一函数。使输入的一个字符串按反序存放,在主函数中输入输出反序后的字符串。 输入 一行字符 输出 逆序后的字符串
题目描述 写一函数,使输入的一个字符串按反序存放,在主函数中输入输出反序后的字符串. 输入 一行字符 输出 逆序后的字符串 样例输入 123456abcdef 样例输出 fedcba654321 来源 ...
- Python底层实现KNN
今天给大家带来的是关于Python机器学习的相关知识,文章围绕着Python底层实现KNN展开,文中有非常详细的解释及代码示例,需要的朋友可以参考下 一.导入数据 借助python自带的pandas库 ...
最新文章
- 递归查询树状结构某个确定的节点
- MYsql 查询 查询当前月份的数据
- CGI方式获取RTX中用户的电话和邮箱
- Mac 技术篇-pip下载速度慢解决办法,pip秒速下载,阿里云镜像配置
- 8个实用的Python内置函数
- 视觉SLAM回环检测、词袋模型和视觉位置识别--论文记录和实验简析
- tomcat源码阅读之StandardHost和StandardEngine
- Python高级——协程
- 7-2 天梯地图 (30分)_「月夜枫YYF」不会吧不会吧,枫哥失守8000分阵地!
- mysql 事务操作入门
- python字符串方法总结_python字符串函数总结
- [usOJ5677]御神渡
- 如何在华为交换机上查询光模块DDM信息?
- 生物信息学反卷积论文阅读
- c语言程序框图示范,C语言程序框图courseware.ppt
- Wordpress 4.6 任意命令执行漏洞
- 基于Java Web考生评分系统设计实现毕业设计源码071114
- Android利用贝塞尔曲线实现翻书效果(适配AndroidX)
- HTTP、FTP状态码 (share)
- C#内存释放(垃圾回收)