机器学习之kNN算法

古人云:“近朱者赤,近墨者黑”。其实机器学习中的kNN算法的核心思想就是这句流传至今的名言。kNN算法又称为K近邻算法,是众多机器学习算法中少有的懒惰学习算法,该算法不仅可以用来回归也可以用来分类。
本实训将带你学习kNN算法的基本原理、怎样使用sklearn中实现的kNN算法来对数据进行分类与回归。最后,将带你学习如何使用kNN算法解决实际问题-红酒分类。

使用sklearn中的kNN算法进行分类

from sklearn.neighbors import KNeighborsClassifier

def classification(train_feature, train_label, test_feature):
    '''
    使用KNeighborsClassifier对test_feature进行分类
    :param train_feature: 训练集数据
    :param train_label: 训练集标签
    :param test_feature: 测试集数据
    :return: 测试集预测结果
    '''

    #********* Begin *********#
    clf=KNeighborsClassifier()
    clf.fit(train_feature, train_label) 
    return clf.predict(test_feature)
    #********* End *********#

使用sklearn中的kNN算法进行回归

from sklearn.neighbors import KNeighborsRegressor

def regression(train_feature, train_label, test_feature):
    '''
    使用KNeighborsRegressor对test_feature进行分类
    :param train_feature: 训练集数据
    :param train_label: 训练集标签
    :param test_feature: 测试集数据
    :return: 测试集预测结果
    '''

    #********* Begin *********#
    clf=KNeighborsRegressor() #生成K近邻分类器
    clf.fit(train_feature, train_label)               #训练分类器
    return clf.predict(test_feature)
    #********* End *********#

分析红酒数据

import numpy as np

def alcohol_mean(data):
    '''
    返回红酒数据中红酒的酒精平均含量
    :param data: 红酒数据对象
    :return: 酒精平均含量,类型为float
    '''

    #********* Begin *********#
    return data.data[:,0].mean()
    #********* End **********#

对数据进行标准化

from sklearn.preprocessing import StandardScaler

def scaler(data):
    '''
    返回标准化后的红酒数据
    :param data: 红酒数据对象
    :return: 标准化后的红酒数据,类型为ndarray
    '''

    #********* Begin *********#
    scaler = StandardScaler()
    after_scaler = scaler.fit_transform(data['data'])
    return after_scaler
    #********* End **********#

使用kNN算法进行预测

from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import StandardScaler

def classification(train_feature, train_label, test_feature):
    '''
    对test_feature进行红酒分类
    :param train_feature: 训练集数据,类型为ndarray
    :param train_label: 训练集标签,类型为ndarray
    :param test_feature: 测试集数据,类型为ndarray
    :return: 测试集数据的分类结果
    '''

    #********* Begin *********#
    scaler = StandardScaler()
    train_feature = scaler.fit_transform(train_feature)
    test_feature = scaler.transform(test_feature)

    clf = KNeighborsClassifier()
    clf.fit(train_feature, train_label)
    return clf.predict(test_feature)
    #********* End **********#

感谢大家的支持!!!!!

  • 34
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
鸢尾花数据集-数据分析 from sklearn import datasets import pandas as pd import matplotlib.pyplot as plt import numpy as np # 获取鸢尾花数据集 lris_df = datasets.load_iris() # 输⼊特征 lris_df.data # ⽬标特征 lris_df.target data_DF = pd.DataFrame(lris_df.data) target_DF = pd.DataFrame(lris_df.target) # dataframe按列拼接 join_DF = pd.concat([data_DF,target_DF],axis=1) # 修改列名 join_DF.columns=['sepal-length','sepal-width','petal-length','petal-width','class'] # 查看数据分布 x_axis = lris_df.data[:,0] y_axis = lris_df.data[:,2] plt.scatter(x_axis,y_axis,c=lris_df.target) plt.show() # 输⼊特征直⽅图分布 join_DF.iloc[:,0:4].hist() plt.show() # 箱线图 join_DF.iloc[:,0:4].plot(kind='box',subplots=True,layout=(2,2),sharex=False,sharey=False) plt.show() ft_DF = join_DF.iloc[:,0:4] # 相关系数 ft_DF.corr() x_val=ft_DF['petal-width'] y_val=ft_DF['petal-length'] plt.scatter(x_val,y_val) data_array = join_DF.values from sklearn import model_selection # 数据集划分 X = data_array[:,0:4] Y = data_array[:,4] validation_size = 0.2 seed = 6 X_train,X_validation,Y_train,Y_validation = model_selection.train_test_split(X,Y,test_size=validation_size,random_state=seed) # KNN分类 from sklearn.neighbors import KNeighborsClassifier knn = KNeighborsClassifier() knn.fit(X_train,Y_train) knn.fit(X_train,Y_train) print(knn.score(X_validation,Y_validation)) # K折交叉验证 from sklearn.model_selection import cross_val_score scores = cross_val_score(knn,X,Y,cv=5,scoring='accuracy') print(scores) from sklearn.model_selection import KFold dfold = model_selection.KFold(n_splits=10,random_state=7) from sklearn import model_selection import matplotlib.pyplot as plt X=lris_df.data Y=lris_df.target k_range = range(1,31) k_scores = [] for k in k_range: knn = KNeighborsClassifier(n_neighbors=k) #调整K值 scores = model_selection.cross_val_score(knn,X,Y,cv=10,scoring='accuracy') k_scores.append(scores.mean()) plt.plot(k_range,k_scores) plt.xlabel('value of K for KNN') plt.ylabel('Cross-Validated Accuracy') plt.show()

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值