唐宇迪机器学习笔记5:K近邻算法实战
目录
一、K近邻算法概述
1、Airbnb 房价预测任务
数据读取
数据特征
2、K近邻原理
3、距离的定义(欧氏距离)
4、实例
二、模型的评估
1、首先制定好训练集和测试集
2、基于单变量预测价格
3、进行衡量
三、数据预处理
特征数据预处理——标准化与归一化
标准化
归一化
四、sklearn库与功能
五、多变量KNN模型
1、多变量距离的计算
2、多变量KNN模型
3、使用Sklearn来完成KNN
4、加入更多的特征
分类/回归问题都可以用该算法解决
一、K近邻算法概述
1、Airbnb 房价预测任务
数据读取
import pandas as pdfeatures = ['accommodates','bedrooms','bathrooms','beds','price','minimum_nights','maximum_nights','number_of_reviews']dc_listings = pd.read_csv('listings.csv')dc_listings = dc_listings[features]print(dc_listings.shape)dc_listings.head()
数据特征
- accommodates: 可以容纳的旅客
- bedrooms: 卧室的数量
- bathrooms: 厕所的数量
- beds: 床的数量
- price: 每晚的费用
- minimum_nights: 客人最少租了几天
- maximum_nights: 客人最多租了几天
- number_of_reviews: 评论的数量
如果我有一个1个房间的房子,我能租多少钱呢???再综合考虑这三个就得到了我的房子大概能值多钱!
需要去看看1个房间的别人都租到多少钱!
K代表候选对象个数,也就是找和房间数量最相近的其他房子的价格
2、K近邻原理
假设我们的数据源中只有5条信息,现在想针对我的房子(只有一个房间)来定一个价格。
在这里假设我们选择的K=3,也就是选3个跟我最相近的房源。
综合考虑这三个,得到了我的房子大概能值多钱!
3、距离的定义(欧氏距离)
如何才能知道哪些数据样本跟我最相近呢?
其中Q1到Qn是一条数据的所有特征信息,P1到Pn是另一条数据的所有特征信息
4、实例
1、假设我们的房子有3个房间
import numpy as npour_acc_value = 3dc_listings['distance'] = np.abs(dc_listings.accommodates - our_acc_value)
dc_listings.distance.value_counts().sort_index()
2、这里我们只用了绝对值来计算,和我们距离为0的(同样数量的房间)有461个
3、 洗牌(打乱顺序),得到洗牌后的数据
dc_listings = dc_listings.sample(frac=1,random_state=0)
dc_listings = dc_listings.sort_values('distance')
dc_listings.price.head()
4、问题:这里面的数据是字符串,需要转换一下!
dc_listings['price'] = dc_listings.price.str.replace("\$|,",'').astype(float)mean_price = dc_listings.price.iloc[:5].mean()
mean_price
5、得到了平均价格,也就是我们的房子大致的价格了 。
二、模型的评估
判断预测的值准不准!
将数据集进行切分,分成一个训练集(训练)和测试集(衡量效果)。
1、首先制定好训练集和测试集
dc_listings.drop('distance',axis=1)
train_df = dc_listings.copy().iloc[:2792]
test_df = dc_listings.copy().iloc[2792:]
2、基于单变量预测价格
只算绝对值。
def predict_price(new_listing_value,feature_column):temp_df = train_dftemp_df['distance'] = np.abs(dc_listings[feature_column] - new_listing_value)temp_df = temp_df.sort_values('distance')knn_5 = temp_df.price.iloc[:5]predicted_price = knn_5.mean()return(predicted_price)
test_df['predicted_price'] = test_df.accommodates.apply(predict_price,feature_column='accommodates')
这样我们就得到了测试集中,所有房子的价格了。
3、进行衡量
计算root mean squared error (RMSE)均方根误差
test_df['squared_error'] = (test_df['predicted_price'] - test_df['price'])**(2)
mse = test_df['squared_error'].mean()
rmse = mse ** (1/2)
rmse
现在我们得到了对于一个变量的模型评估得分(越低越好)
三、数据预处理
不同的变量效果会不会不同呢?
for feature in ['accommodates','bedrooms','bathrooms','number_of_reviews']:#test_df['predicted_price'] = test_df.accommodates.apply(predict_price,feature_column=feature)test_df['predicted_price'] = test_df[feature].apply(predict_price,feature_column=feature)test_df['squared_error'] = (test_df['predicted_price'] - test_df['price'])**(2)mse = test_df['squared_error'].mean()rmse = mse ** (1/2)print("RMSE for the {} column: {}".format(feature,rmse))
看起来结果差异挺大,接下来综合利用所有的信息来一起进行测试 。
当用欧氏距离进行评估时,有些特征数据取值较大,有些特征数据取值较小。
由于特征值不同,导致在数值上有较大和较小的差异。需要对数据进行预处理。
特征数据预处理——标准化与归一化
标准化
对原始数据进行处理,进行standardization(或者叫做Z-score normalization)
要求:均值和标准差
转换公式如下:
意义:如果特征值之间的数值差异太大,那么更新的结果肯定会产生较大的差异。在最开始的时候,我们认为特征之间的重要程度是一样的,因此预处理的工作必须做!!
参数更新:
归一化
Min-Max scalling(或者叫“normalization”,也就是我们常说的0-1归一化)
处理后的所有特征的值都会被压缩到0到1区间上,这样做还可以抑制离群值对结果的影响。
归一化的公式:
四、sklearn库与功能
python中使用最多的一个机器学习库。
(模块:分类、回归、距离、降维、模型选择、数据预处理)
API文档:API Reference — scikit-learn 1.0.2 documentation
学习案例:Examples — scikit-learn 1.0.2 documentation
标准化和归一化后数据分布不会发生变化,取值范围会发生改变
import pandas as pd
from sklearn.preprocessing import StandardScaler
features = ['accommodates','bedrooms','bathrooms','beds','price','minimum_nights','maximum_nights','number_of_reviews']dc_listings = pd.read_csv('listings.csv')dc_listings = dc_listings[features]dc_listings['price'] = dc_listings.price.str.replace("\$|,",'').astype(float)dc_listings = dc_listings.dropna()dc_listings[features] = StandardScaler().fit_transform(dc_listings[features])normalized_listings = dc_listingsprint(dc_listings.shape)normalized_listings.head()
排除了大的数值和小的数值之间从差异。
五、多变量KNN模型
1、多变量距离的计算
scipy中已经有现成的距离的计算工具了
from scipy.spatial import distancefirst_listing = normalized_listings.iloc[0][['accommodates', 'bathrooms']]
fifth_listing = normalized_listings.iloc[20][['accommodates', 'bathrooms']]
first_fifth_distance = distance.euclidean(first_listing, fifth_listing)
first_fifth_distance
2、多变量KNN模型
3、使用Sklearn来完成KNN
1、导入需要使用的模块;对KNN模型进行实例化;.fit:进行模型的训练;预测测试集之后的结果。
from sklearn.neighbors import KNeighborsRegressor
cols = ['accommodates','bedrooms']
knn = KNeighborsRegressor(n_neighbors=20)
knn.fit(norm_train_df[cols], norm_train_df['price'])
two_features_predictions = knn.predict(norm_test_df[cols])
2、 计算RMSE结果 0.813735533525
from sklearn.metrics import mean_squared_errortwo_features_mse = mean_squared_error(norm_test_df['price'], two_features_predictions)
two_features_rmse = two_features_mse ** (1/2)
print(two_features_rmse)
4、加入更多的特征
knn = KNeighborsRegressor()cols = ['accommodates','bedrooms','bathrooms','beds','minimum_nights','maximum_nights','number_of_reviews']knn.fit(norm_train_df[cols], norm_train_df['price'])
four_features_predictions = knn.predict(norm_test_df[cols])
four_features_mse = mean_squared_error(norm_test_df['price'], four_features_predictions)
four_features_rmse = four_features_mse ** (1/2)
four_features_rmse
K近邻不适用数据量大时。
唐宇迪机器学习笔记5:K近邻算法实战相关推荐
- 01. 机器学习笔记01——K近邻算法 , CV_example
K近邻算法(K-nearest neighbor,KNN算法) 李航博士<统计学习方法> 最近邻(k-Nearest Neighbors,KNN)算法是一种分类算法 应用场景:字符识别.文 ...
- 唐宇迪学习笔记20:聚类算法——DBSCAN
目录 一.DBSCAN聚类算法 (Density-Based Spatial Clustering of Applications with Noise) 二.DBSCAN工作流程 工作流程 参数选择 ...
- 唐宇迪机器学习课程笔记:逻辑回归之信用卡检测任务
信用卡欺诈检测 基于信用卡交易记录数据建立分类模型来预测哪些交易记录是异常的哪些是正常的. 任务流程: 加载数据,观察问题 针对问题给出解决方案 数据集切分 评估方法对比 逻辑回归模型 建模结果分析 ...
- 唐宇迪机器学习课程数据集_最受欢迎的数据科学和机器学习课程-2020年8月
唐宇迪机器学习课程数据集 There are a lot of great online resources and websites on data science and machine lear ...
- 唐宇迪机器学习之离职预测
最近在看唐宇迪机器学习视频,这个视频我觉得很不错,可是我资源有限,有的视频没有配套的资料.数据集或者是代码,但还是可以看视频了解其中的一些知识点. 项目介绍 该项目是通过员工对公司的满意程度.公司对员 ...
- 唐宇迪机器学习实战课程笔记(全)
1. 线性回归 1.1线性回归理论 1.2线性回归实战 2.训练调参基本功(线性回归.岭回归.Lasso回归) 2.1 线性回归模型实现 2.2不同GD策略对比 2.3多项式曲线回归 2.4过拟合和欠 ...
- 唐宇迪Pytorch笔记(附课程资料)
目录 pytorch_tutorial 介绍 软件架构 安装教程 所需python包 使用说明 配套资料 { title = {pytorch深度学习实战}, author = {唐宇迪}, url ...
- 2、python机器学习基础教程——K近邻算法鸢尾花分类
一.第一个K近邻算法应用:鸢尾花分类 import numpy as np from sklearn.datasets import load_iris from sklearn.model_sele ...
- 机器学习-分类之K近邻算法(KNN)原理及实战
k近邻算法(KNN) 简介 KNN算法是数据挖掘分类技术中最简单的方法之一.它通过测量不同特征值之间的距离进行分类的.其基本思路为:如果一个样本在特征空间中的k个最近邻样本中的大多数属于某一个类别,则 ...
- 机器学习——聚类之k近邻算法及python使用
聚类算法之k近邻及python使用 什么是k近邻算法 k近邻算法流程 使用sklearn进行代码实现 数据集介绍 标准化 代码实现 写在开头,套用我的老师的一句话目前所有自然学科的前沿都是在研究数学, ...
最新文章
- 人生致命的8个经典问题[转]
- python读取excel日期内容读出来是数字-Python读取Excel,日期列读出来是数字的处理...
- 深度学习核心技术精讲100篇(三)-层次自适应的多臂老虎机决策算法 ( HATCH )在滴滴中的应用
- 爬虫 spider01——基本概念
- 使用代码批量激活inactive object
- python学习之简介
- 系统学习机器学习之距离的度量(二)--DTW
- 如何删除Mac OS X上隐藏的文件?
- 编写myqq即时聊天脚本,实现相互通信(tcp协议)
- Linux - 增加用户、添加用户组
- JBIL:一种区块链自治规则与国家法律的衔接框架
- 海定计算机计算标准差,方差 标准差
- oc项目中使用swift
- 台式机 装 服务器系统,台式机和笔记本电脑应该安装什么系统比较好?
- mysql in 分组,基于mysql实现group by取各分组最新一条数据
- 2023寒假模拟赛1题解
- 海康威视API-单帧数据捕获并保存成JPEG图片NET_DVR_CaptureJPEGPicture
- 魅族6支持html吗,不知道你们发现了么,魅族Flyme6 超好用的隐藏功能
- Git上传代码文件至Github
- VC6中工具条的新特色 (转)
热门文章
- c语言写的fft程序,C语言编写FFT程序.pdf
- 视频教程-oracle入门到大神(备mysql、java基础、javaee必经之路)-Oracle
- 08版新精粹45集实战技巧视频教程免费下载wordExcel
- foobar2000 for mac(经典音乐播放器)
- 写给非网工的CCNA教程(7)通过VLAN连接实现同网段通信
- Grasshopper and Rhino: Python Scripting Grasshopper和Rhino:Python脚本 Lynda课程中文字幕
- win10 安装VB6详细安装教程及其中的坑
- 从零开始学习Android开发
- 魔鬼作坊端游脱机封包辅助制作
- 游戏策划案应该分哪几个方面来编写?制作游戏系统应该准备整理那些方面的内容?游戏策划相关分析