KNN算法笔记+实例演示

一.Scikit-Learn许多知名机器学习的算法实现的库

1.Scikit-Learn 包含,分类,聚类,回归,模型选择,特征处理,维度缩小几个大的功能模块,导入Sklearn模块

import sklearn

2.机器学习的步骤分析

#1.获取数据集
#2.数据基本的处理和分析(分析主要是找特征)
#3.特征工程
#4.机器学习
#5.模型评估

3.KNN算法的代码实现

#从sklearn的邻居中导入KNN分类算法
from sklearn.neighbors import KNeighborsClassifier
x=[[0],[1],[2],[-1]]  
#训练集,用[]在外面括起,要训练的数据集使用[]再括起来,形如[[],[],[],[],[]]
y=['樱花','桃花','菊花','菊花'] #标签集,一一对应上述是什么种类
#训练KNN模型
estimator = KNeighborsClassifier(n_neighbors=2) 
estimator.fit(x,y)
#用训练的估计器去预测()里的数据是哪一列的
res = estimator.predict([[-2],[-1.5],[-0.5]])
#列表里的【】数,这边预测要用[[],[],[]]框起来
print(res)

二.从sklearn中读取大数据和小数据

1.读取小数据集(sklearn下载时自带的测试数据集,一般就在本地),用load_数据名

from sklearn.datasets import load_iris,fetch_20newsgroups 
#import后如果引用小数据集,就用load_数据名,大数据集的话就用fetch_数据名
#用from sklearn.datasets import load_*(*指的是数据名,上面代码的iris是指的鸢尾花的数据)
mini_data=load_iris()
print(mini_data)

2.读取大数据集要从网络上下载至本地然后读取,使用fetch_数据名

data_home是用来将数据下载在本地的位置,subset='train/test/all可选择要从网上下载的训练集,测试集或者全部,默认都下载全部数据集

big_data=fetch_20newsgroups(data_home='D:/',subset='train/test/all')
print(big_data)

3.sklearn查看读取的数据的各个细节

#load和fetch读取出的小数据集或者大数据集都是用字典格式,为了方便看数据,使用以下的方法读取具体的内容
print('iris的数据集的数据(就是特征值):/n',mini_data.data)
print('iris的target(标签名):/n',mini_data.target)
print('iris的各个特征值的名字(我觉得可以称之为列名)',mini_data.feature_names)
print('iris标签值(数据是怎么分类的):/n',mini_data.target_names)
print('iris的描述,数据分析里的那个discribe一样得:/n',mini_data.DESCR

三.将案例鸢尾花进行数据可视化

1.前面已经读取了鸢尾花的数据,为了更方便的观察,我们将它可视化

#先把数据由读取的字典型转换成DF
import pandas as pd
import matplotlib.pyplot as plt #serborn在matplotlib库下才可使用
import seaborn as sns #画图用的库,比matplotlib好看,好用
iris_data=pd.DataFrame(data=mini_data.data,columns=mini_data.feature_names)
iris_data['target']=mini_data.target  #把标签加到这个DF后面,不需要赋值到新的DF,他直接在iris_data上进行修改
#sns.lmplot的使用不想细说,自己百度去,整理的很全,这个我也会用
def iris_plot(data,col1,col2):
    sns.lmplot(x=col1,y=col2,data=data,hue='target',fit_reg=False)
    plt.title('鸢尾花数据展示')#图像标题
    plt.xlabel(col1)#x轴的注释
    plt.ylabel(col2)#y轴的注释
    plt.show()
# iris_plot(iris_data,'sepal length (cm)','petal length (cm)')

四.数据集中训练集和测试集的划分

1.机器学习一般的数据集会划分成两个部分

训练集:用来训练,构建模型
测试集:用于检验模型是否有效

2.一般划分比例为:

训练集:70%,80%,75%
测试集:30%,20%,25%

3.使用以下的代码进行划分训练集和测试集的操作

from sklearn.model_selection import train_test_split#在sklearn下的模型选择中导入训练测试集的划分这个库
#在划分数据集时输出的顺序严格遵守下面的顺序,训练集的特征值,测试集的特征值,训练集的标签值,测试集的标签值
训练集的特征值,测试集的特征值,训练集的标签值,测试集的标签值=train_test_split(mini_data.data,mini_data.target,test_size=0.2,random_state=22)
#train_test_split代码中的参数,(数据集特征部分的所有数据,数据集标签的全部数据,测试集的大小,此处是20%,随机种子(随便写即可))
# print(训练集的特征值,'\n',测试集的特征值,'\n',训练集的标签值,'\n',测试集的标签值)
# print(训练集的特征值.shape,'\n',测试集的特征值.shape,'\n',训练集的标签值.shape,'\n',测试集的标签值.shape)

五.特征预处理(归一化/标准化)

为什么要进行归一化或者标准化:特征的单位或者大小相差较大,或者某特征的方差相比其他的特征要大出几个数量级,容易影响目标结果,使训练结果出现较大偏差。

(一)归一化

1.归一化的定义

通过原始数据进行变换把数据映射到(默认[0,1))之间,计算过程参见我的手写笔记

2.代码实现归一化

#从sklearn中的准备(pre)导入归一化的库
from sklearn.preprocessing import MinMaxScaler
#实例化一个进行归一化操作的转换器
transfer=MinMaxScaler(feature_range=(0,1))
#调用这个归一化转换器
归一化数据=transfer.fit_transform(data[['col1,col2,col3']]) #数据是DF中你需要进行归一化的列。

使用归一化的注意点:注意最大值最小值是变化的,另外,最大值与最小值非常容易受异常点影响,所以这种方法鲁榛性较差,只适合传统精确小数据场景。

(二)标准化

#从sklearn中的准备(pre)导入标准化的库
from sklearn.preprocessing import StandardScaler
#实例化一个进行归一化操作的转换器
transfer=StandardScaler()
#调用这个标准化转换器
标准化数据=transfer.fit_transform(data[['col1,col2,col3']]) #数据是DF中你需要进行标准化的列。

六.鸢尾花数据的处理

from sklearn.datasets import load_iris
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier

1.获取数据集

iris=load_iris()

2.数据基本的处理和分析(分析主要是找特征)

x_train,x_test,y_train,y_test=train_test_split(iris.data,iris.target,test_size=0.25,random_state=10)

3.特征工程

先对数据进行标准化处理,把训练机的特征值和测试集的特征值进行标准化处理

transfer=StandardScaler()
x_train=transfer.fit_transform(x_train)
x_test=transfer.fit_transform(x_test)

4.机器学习(模型训练)

estimator=KNeighborsClassifier(n_neighbors=5)
estimator.fit(x_train,y_train)

5.模型评估

#(1)输出预测值
res=estimator.predict(x_test)
print(y_test)
print(res)
#(2)判断输出准确率,跟y_test进行对比
#找出测试值与预测值不同总数除以测试值总数
# 求准确率
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y_test,res)#用来求准确率的函数
print('预测准确率:',accuracy)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值