快速入门Python机器学习(九)

简介: 快速入门Python机器学习(九)

6 K邻近算法(KNeighbors)


所谓K近邻算法,即是给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例(也就是上面所说的K个邻居), 这K个实例的多数属于某个类,就把该输入实例分类到这个类中。


image.png


  • 如果K=3,绿色圆点的最近的3个邻居是2个红色小三角形和1个蓝色小正方形,少数从属于多数,基于统计的方法,判定绿色的这个待分类点属于红色的三角形一类。
  • 如果K=5,绿色圆点的最近的5个邻居是2个红色三角形和4个蓝色的正方形,还是少数从属于多数,基于统计的方法,判定绿色的这个待分类点属于蓝色的正方形一类。


于此我们看到,当无法判定当前待分类点是从属于已知分类中的哪一类时,我们可以依据统计学的理论看它所处的位置特征,衡量它周围邻居的权重,而把它归为(或分配)到权重更大的那一类。这就是K近邻算法的核心思想。


6 .1 K邻近分类算法(KNeighbors Classifier)


sklearn.neighbors.KNeighborsClassifier(n_neighbors=5, weights='uniform', algorithm='auto', leaf_size=30,p=2, metric='minkowski', metric_params=None, n_jobs=1, **kwargs)


参数


参数

解释

n_neighbors

int, optional (默认= 5),默认情况下用于查询的邻居数量。(一般也不需要更改,默认5是最佳的。也可以尝试在小范围调试看看效果)

algorithm

 : {'auto','ball_tree','kd_tree','brute'}, optional。用于计算最近邻居的算法:

'ball_tree' 用于BallTree

'kd_tree'用于KDTree

'brute'用于强力搜查.

'auto'将尝试根据传递给fit方法的值来决定最合适的算法

注意:使用强力拟合稀疏输入将覆盖此参数的设置。


属性


属性

解释

classes_

array of shape (n_classes,)分类器已知的类标签使用的距离度量。

effective_metric_

str or callble如果度量参数设置为'minkowski'p参数设置为2,则它将与度量参数或其同义词相同,例如'euclidean'

effective_metric_params_

dict度量类参数、属性和方法的其他关键字参数。对于大多数度量,都将与metric_params参数相同,但如果effective_metric_ attribute设置为'minkowski',则也可能包含p参数值。

n_samples_fit_

int拟合数据中的样本数。

outputs_2d_

bool如果y的形状在拟合过程中为(n_samples, )  (n_samples, 1),则为False,否则为True


方法


方法

解释

fit(X, y)

从训练数据集中拟合k近邻分类器。

get_params([deep])

获取此估计器的参数。

kneighbors([X, n_neighbors, return_distance])

找到点的K邻域。

kneighbors_graph([X, n_neighbors, mode])

计算X上点的k邻域(加权)图

predict(X)

预测所提供数据的类标签。

predict_proba(X)

测试数据X的返回概率估计。

score(X, y[, sample_weight])

返回给定测试数据和标签的平均精度。

set_params(**params)

设置此估计器的参数。


6.1.1 K邻近算法分析make_blobs数据集


2类

def sklearn_Kneighbors_for_make_blobs_2_centers():
    myutil = util()
    # 产生200个新样本,分成2类
    data = make_blobs(n_samples=200,centers=2, random_state=8)
    X,y =data
    print("X is :",X)
    print("y is :",y)
    #将数据集用散点图方式进行可视化分析
    plt.scatter(X[:,0],X[:,1],c=y,cmap=plt.cm.spring,edgecolor='k')
plt.show()


输出

X is : [[ 6.75445054  9.74531933]
 [ 6.80526026 -0.2909292 ]
 [ 7.07978644  7.81427747]
y is : [0 1 0 1 0 0 1 0 0 1 …0 1]

image.png

clf = KNeighborsClassifier()
    clf.fit(X,y)
    #下面代码用于画图
    title = "KN邻近分类——2个类别"
    myutil.draw_scatter(X,y,clf,title)
    myutil.plot_learning_curve(KNeighborsClassifier(),X,y,title)
    myutil.show_pic(title)

image.png

image.png


5

def sklearn_Kneighbors_for_make_blobs_5_centers():
    myutil = util()
    data = make_blobs(n_samples=500,centers=5, random_state=8)
    X,y =data
    plt.scatter(X[:,0],X[:,1],c=y,cmap=plt.cm.spring,edgecolor='k')
    plt.show()

image.png


5类中有2类混合在一起

clf = KNeighborsClassifier()
    clf.fit(X,y)
    #下面代码用于画图
    title = "KN邻近分类——5个类别"
    myutil.draw_scatter(X,y,clf,title)
    myutil.plot_learning_curve(KNeighborsClassifier(),X,y,title)
    myutil.show_pic(title)

image.png

image.png


6.1.2 K邻近算法分析load_iris数据集

from sklearn import datasets
def KNeighborsClassifier_for_load_iris():
    myutil = util()
    X,y = datasets.load_iris().data,datasets.load_iris().target
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
    title = "KNN分类_鸢尾花数据"
    clf = KNeighborsClassifier()
    clf.fit(X_train, y_train)
    myutil.print_scores(clf,X_train,y_train,X_test,y_test,title)
    myutil.plot_learning_curve(KNeighborsClassifier(),X,y,title)
    myutil.show_pic(title)
在Util.py中定义
#打印得分
def print_scores(self,clf,X_train,y_train,X_test,y_test,title):
       title = title+":\n{:.2%}"
       print(title.format(clf.score(X_train,y_train)))
       print(title.format(clf.score(X_test,y_test)))


输出:

KNN分类_鸢尾花数据:
97.50%
KNN分类_鸢尾花数据:
96.67%

image.png

image.png


6.1.3 K邻近算法分析load_wine数据集

def KNeighborsClassifier_for_load_wine():
    myutil = util()
    wine_dataset = datasets.load_wine()
    X,y = wine_dataset['data'],wine_dataset['target']
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
    title = "KNN分类_红酒数据"
    clf = KNeighborsClassifier()
    clf.fit(X_train, y_train)
    myutil.print_scores(clf,X_train,y_train,X_test,y_test,title)
    myutil.plot_learning_curve(KNeighborsClassifier(),X,y,title)
    myutil.show_pic(title)
    X_new = np.array([[25.5,3.14,3.22,18.5,95.8, 0.97, 2.52, 0.67, 1.52, 7.3, 0.98, 2.96, 990]])
    prediction = clf.predict(X_new)
    print('预测的红酒为:{}:\n'.format(wine_dataset['target_names'][prediction]))


输出

KNN分类_红酒数据:
77.46%
KNN分类_红酒数据:
72.22%
预测的红酒为:['class_0']:

image.png

image.png

6.1.4 K邻近算法分析load_breast_cancer数据集

def KNeighborsClassifier_for_load_breast_cancer():
    myutil = util()
    wine_dataset = datasets.load_breast_cancer()
    X,y = wine_dataset['data'],wine_dataset['target']
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
    title = "KNN分类_乳腺癌数据"
    clf = KNeighborsClassifier()
    clf.fit(X_train, y_train)
    myutil.print_scores(clf,X_train,y_train,X_test,y_test,title)
    myutil.plot_learning_curve(KNeighborsClassifier(),X,y,title)
    myutil.show_pic(title)
    print('第310个样本预测结果: {}'.format(clf.predict([X[310]])))


输出

KNN分类_乳腺癌数据:
94.07%
KNN分类_乳腺癌数据:
95.61%
第310个样本预测结果: [1]

image.png

image.png


6.1.5 比对线性分类方法(逻辑回归)与K邻近算法



逻辑回归算法

K邻近算法

鸢尾花数据

96.67%、100.00%

97.50%96.67%

红酒数据

100.00%、94.44%

77.46%72.22%

乳腺癌数据

94.95%、97.37%

94.07%95.61%



可见红酒数据逻辑回归算法的正确率比较高,鸢尾花数据、乳腺癌数据两者的得分数据基本相同。另外可以看见由于KNN算法不是线性的,所以分布图的边界不是直线。


目录
相关文章
|
6天前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
36 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
5天前
|
机器学习/深度学习 算法 数据挖掘
Python数据分析革命:Scikit-learn库,让机器学习模型训练与评估变得简单高效!
在数据驱动时代,Python 以强大的生态系统成为数据科学的首选语言,而 Scikit-learn 则因简洁的 API 和广泛的支持脱颖而出。本文将指导你使用 Scikit-learn 进行机器学习模型的训练与评估。首先通过 `pip install scikit-learn` 安装库,然后利用内置数据集进行数据准备,选择合适的模型(如逻辑回归),并通过交叉验证评估其性能。最终,使用模型对新数据进行预测,简化整个流程。无论你是新手还是专家,Scikit-learn 都能助你一臂之力。
40 8
|
2天前
|
机器学习/深度学习 数据可视化 数据挖掘
数据可视化大不同!Python数据分析与机器学习中的Matplotlib、Seaborn应用新视角!
在数据科学与机器学习领域,数据可视化是理解数据和优化模型的关键。Python凭借其强大的可视化库Matplotlib和Seaborn成为首选语言。本文通过分析一份包含房屋面积、卧室数量等特征及售价的数据集,展示了如何使用Matplotlib绘制散点图,揭示房屋面积与售价的正相关关系;并利用Seaborn的pairplot探索多变量间的关系。在机器学习建模阶段,通过随机森林模型展示特征重要性的可视化,帮助优化模型。这两个库在数据分析与建模中展现出广泛的应用价值。
11 2
|
7天前
|
机器学习/深度学习 存储 人工智能
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
使用Python作为开发语言,基于文本数据集(一个积极的xls文本格式和一个消极的xls文本格式文件),使用Word2vec对文本进行处理。通过支持向量机SVM算法训练情绪分类模型。实现对文本消极情感和文本积极情感的识别。并基于Django框架开发网页平台实现对用户的可视化操作和数据存储。
18 0
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
|
20天前
|
机器学习/深度学习 数据采集 人工智能
使用Python实现简单的机器学习分类器
【8月更文挑战第37天】本文将引导读者了解如何利用Python编程语言构建一个简单的机器学习分类器。我们将从基础概念出发,通过代码示例逐步深入,探索数据预处理、模型选择、训练和评估过程。文章旨在为初学者提供一条清晰的学习路径,帮助他们理解并实现基本的机器学习任务。
|
17天前
|
机器学习/深度学习 算法 Python
从菜鸟到大师:一棵决策树如何引领你的Python机器学习之旅
【9月更文挑战第9天】在数据科学领域,机器学习如同璀璨明珠,吸引无数探索者。尤其对于新手而言,纷繁复杂的算法常让人感到迷茫。本文将以决策树为切入点,带您从Python机器学习的新手逐步成长为高手。决策树以其直观易懂的特点成为入门利器。通过构建决策树分类器并应用到鸢尾花数据集上,我们展示了其基本用法及效果。掌握决策树后,还需深入理解其工作原理,调整参数,并探索集成学习方法,最终将所学应用于实际问题解决中,不断提升技能。愿这棵智慧之树助您成为独当一面的大师。
22 3
|
19天前
|
机器学习/深度学习 算法 Python
决策树下的智慧果实:Python机器学习实战,轻松摘取数据洞察的果实
【9月更文挑战第7天】当我们身处数据海洋,如何提炼出有价值的洞察?决策树作为一种直观且强大的机器学习算法,宛如智慧之树,引领我们在繁复的数据中找到答案。通过Python的scikit-learn库,我们可以轻松实现决策树模型,对数据进行分类或回归分析。本教程将带领大家从零开始,通过实际案例掌握决策树的原理与应用,探索数据中的秘密。
29 1
|
7天前
|
机器学习/深度学习 数据采集 算法
机器学习新纪元:用Scikit-learn驾驭Python,精准模型选择全攻略!
在数据爆炸时代,机器学习成为挖掘数据价值的关键技术,而Scikit-learn作为Python中最受欢迎的机器学习库之一,凭借其丰富的算法集、简洁的API和高效性能,引领着机器学习的新纪元。本文通过一个实际案例——识别垃圾邮件,展示了如何使用Scikit-learn进行精准模型选择。从数据预处理、模型训练到交叉验证和性能比较,最后选择最优模型进行部署,详细介绍了每一步的操作方法。通过这个过程,我们不仅可以看到如何利用Scikit-learn的强大功能,还能了解到模型选择与优化的重要性。希望本文能为你的机器学习之旅提供有价值的参考。
10 0
|
16天前
|
机器学习/深度学习 人工智能 TensorFlow
神经网络入门到精通:Python带你搭建AI思维,解锁机器学习的无限可能
【9月更文挑战第10天】神经网络是开启人工智能大门的钥匙,不仅是一种技术,更是模仿人脑思考的奇迹。本文从基础概念入手,通过Python和TensorFlow搭建手写数字识别的神经网络,逐步解析数据加载、模型定义、训练及评估的全过程。随着学习深入,我们将探索深度神经网络、卷积神经网络等高级话题,并掌握优化模型性能的方法。通过不断实践,你将能构建自己的AI系统,解锁机器学习的无限潜能。
13 0
|
19天前
|
机器学习/深度学习 人工智能 算法
探索人工智能:机器学习的基本原理与Python代码实践
【9月更文挑战第6天】本文深入探讨了人工智能领域中的机器学习技术,旨在通过简明的语言和实际的编码示例,为初学者提供一条清晰的学习路径。文章不仅阐述了机器学习的基本概念、主要算法及其应用场景,还通过Python语言展示了如何实现一个简单的线性回归模型。此外,本文还讨论了机器学习面临的挑战和未来发展趋势,以期激发读者对这一前沿技术的兴趣和思考。