当前位置:服务支持 >  软件文章 >  机器学习入门:监督学习之K近邻(KNN)算法的基本原理与Python实现算例详解

机器学习入门:监督学习之K近邻(KNN)算法的基本原理与Python实现算例详解

阅读数 28
点赞 0
article_banner

问题描述

使用客户特征数据预测客户是否有流失的可能;

数据文件名称Orange_Telecom_Churn_Data.csv。

分析KNN算法不同参数设置对模型预测精度的影响

数据来源于:https://software.intel.com/content/www/cn/zh/develop/training/course-machine-learning.html

数据文件、源程序等均可在QQ群517718332中下载。

第一步:获取数据

导入数据;

观察数据格式;

对数据进行初步的处理,比如删除一些没有意义的特征,替换一些缺失值等。

# 导入模块
import pandas as pd
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelBinarizer,MinMaxScaler
from sklearn.model_selection import GridSearchCV
from sklearn.neiors import KNeiorsClassifier
import numpy as np
import matplotlib.pyplot as plt

# 导入数据
file_path = "./data/Orange_Telecom_Churn_Data.csv"
raw_data = pd.read_csv(file_path)
raw_data.head()

表格太大公众号显示有问题,大家可以在这个网站上看http://www.xiaoqing-cae.com/

raw_data.describe()

表格太大公众号显示有问题,大家可以在这个网站上看http://www.xiaoqing-cae.com/

# 观察特征值是否能把目标值区分开,或者说特征值是否有效
# sns.pairplot(raw_data, hue='churned', height=3);

g = sns.JointGrid(data=raw_data, x="account_length", y="number_vmail_messages", hue="churned")
g.plot(sns.scatterplot, sns.histplot);


监督学习 K近邻算法算例的图1

第二步:数据处理

观察原始数据可知:

  • 数据共有5000个样本
  • 每个样本有20个特征值,1个目标值
  • 目标是只有两类,即只需要划分为两类
# 删除没有意义的特征值

raw_data.drop(['state', 'area_code', 'phone_number'], axis=1, inplace=True)
raw_data.head()

表格太大公众号显示有问题,大家可以在这个网站上看http://www.xiaoqing-cae.com/

# 数据中有些是浮点数,有些是类别如yes or no;需要将类别转换为数据

lb = LabelBinarizer()

for col in ['intl_plan', 'voice_mail_plan', 'churned']:
   raw_data[col] = lb.fit_transform(raw_data[col])
# 分数据集为训练集和测试集

x_cols = [x for x in raw_data.columns if x != 'churned']
x_data = raw_data[x_cols]
y_data = raw_data['churned']
x_train, x_test, y_train, y_test = train_test_split(x_data,y_data, test_size=0.2, random_state=20)

特征工程

# 将所有的特征值转换至0~1范围内;特征值归一化处理

msc = MinMaxScaler()

x_train = msc.fit_transform(x_train)
x_test  = msc.fit_transform(x_test)

训练模型与评估

# k从1~20;p从1~2;绘制精度的关系曲线

accuracy_s1 = []
accuracy_s2 = []

for i in range(1,30):
   # 训练模型
   knn = KNeiorsClassifier(n_neiors=i,p = 1)
   knn = knn.fit(x_train, y_train)
   # 评估模型准确率
   score = knn.score(x_test, y_test)
   accuracy_s1.append([i,score])
   
   knn = KNeiorsClassifier(n_neiors=i,p = 2)
   knn = knn.fit(x_train, y_train)
   # 评估模型准确率
   score = knn.score(x_test, y_test)
   accuracy_s2.append([i,score])
# 绘制曲线
accuracy_s1 = np.array(accuracy_s1)
accuracy_s2 = np.array(accuracy_s2)

plt.figure()
#解决中文显示问题
plt.rcParams['font.sans-serif'] = ['KaiTi'] # 指定默认字体
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
plt.xlabel("k 值")
plt.ylabel("准确率")
plt.plot(accuracy_s1[:,0],accuracy_s1[:,1],label='p = 1')
plt.plot(accuracy_s2[:,0],accuracy_s2[:,1],label='p = 2')
plt.legend()

plt.show()


监督学习 K近邻算法算例的图2

从上述分析可以可知:

  • k值为10~15预测的精度最高;
  • p=1时精度比p=2时高;
  • 评估精度最高可以达到0.9。

免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删
相关文章
QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空