python机器学习_近邻算法_分类Ionosphere电离层数据

简介: python机器学习_近邻算法_分类Ionosphere电离层数据

摘要

本文使用python机器学习库Scikit-learn中的工具,以某网站电离层数据为案例,使用近邻算法进行分类预测。并在训练后使用K折交叉检验进行检验,最后输出预测结果及准确率。过程产生一系列直观的可视化图像。希望文章能够对大家有所帮助。祝大家学习顺利!

在这里插入图片描述

1.数据获取

1.点击链接获取数据
数据获取链接
http://archive.ics.uci.edu/ml/datasets/Ionosphere
2.点击Data Floder
在这里插入图片描述

3.选择ionosphere.data和ionosphere.name这两个文件并下载
在这里插入图片描述
4.下载后放在指定目录下,可以直接通过pycharm查看数据的基本信息
ionosphere.data是我们需要用到的数据,
在这里插入图片描述

ionosphere.name是对该数据的介绍。

从ionosphere.name中可以看到,ionosphere.data共有351个样本,34个特征,且第35个表示类别,有g和b两个取值,分别表示“good”和“bad”。
在这里插入图片描述

2.数据集分割与初步训练表现

import os
import csv
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import cross_val_score
from matplotlib import pyplot as plt
from collections import defaultdict


data_filename = "ionosphere.data"


X = np.zeros((351, 34), dtype='float')
y = np.zeros((351,), dtype='bool')


with open(data_filename, 'r') as input_file:
    reader = csv.reader(input_file)
    # print(reader)  # csv.reader类型
    for i, row in enumerate(reader):
        data = [float(datum) for datum in row[:-1]]
        # Set the appropriate row in our dataset
        X[i] = data
        # 将“g”记为1,将“b”记为0。
        y[i] = row[-1] == 'g'


# 划分训练集、测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=14)

# 即创建估计器(K近邻分类器实例) 默认选择5个近邻作为分类依据
estimator = KNeighborsClassifier()

# 进行训练,
estimator.fit(X_train, y_train)

# 评估在测试集上的表现
y_predicted = estimator.predict(X_test)

# 计算准确率
accuracy = np.mean(y_test == y_predicted) * 100
print("The accuracy is {0:.1f}%".format(accuracy))

# 进行交叉检验,计算平均准确率
scores = cross_val_score(estimator, X, y, scoring='accuracy')
average_accuracy = np.mean(scores) * 100
print("The average accuracy is {0:.1f}%".format(average_accuracy))

如图,该分类算法准确率可达86.4%,交叉检验后的平均准确率可达82.6%。属于是比较优秀的算法。
在这里插入图片描述

3.测试不同近邻值

测试不同的 近邻数 n_neighbors的值(上边默认为5)下的分类准确率,
选择近邻值从1到20的二十个数字,
并绘图展示

avg_scores = []
all_scores = []
parameter_values = list(range(1, 21))  # Including 20
for n_neighbors in parameter_values:
    estimator = KNeighborsClassifier(n_neighbors=n_neighbors)
    scores = cross_val_score(estimator, X, y, scoring='accuracy')
    avg_scores.append(np.mean(scores))
    all_scores.append(scores)

# 绘制n_neighbors的不同取值与分类正确率之间的关系
plt.figure(figsize=(32, 20))
plt.plot(parameter_values, avg_scores, '-o', linewidth=5, markersize=24)
plt.show()

在这里插入图片描述
可以看出,准确率整体趋势随着近邻数的增加而减小。近邻值为2时准确率最高。


4.交叉检验

把交叉检验每次验证的准确率也绘制出来
(20个近邻值每个对应5个训练集,对应5次检验)

for parameter, scores in zip(parameter_values, all_scores):
    n_scores = len(scores)
    plt.plot([parameter] * n_scores, scores, '-o')
plt.show()

各次检验准确率图示如下:
在这里插入图片描述
绘制出散点图

plt.plot(parameter_values, all_scores, 'bx')
plt.show()

在这里插入图片描述


5. 十折交叉检验

all_scores = defaultdict(list)
parameter_values = list(range(1, 21))  # Including 20

for n_neighbors in parameter_values:
    estimator = KNeighborsClassifier(n_neighbors=n_neighbors)
    scores = cross_val_score(estimator, X, y, scoring='accuracy', cv=10)
    all_scores[n_neighbors].append(scores)

for parameter in parameter_values:
    scores = all_scores[parameter]
    n_scores = len(scores)
    plt.plot([parameter] * n_scores, scores, '-o')  

plt.plot(parameter_values, avg_scores, '-o')
plt.show()

检验结果如下图所示:
在这里插入图片描述
因为每个近邻值下,10次检验中的准确率可能会有重复值,所以在图像中每个近邻值上的准确率个数会有差异。

6.输出预测结果

这里用测试集作为待测数据,使用上述算法进行预测,并输出预测结果,
且令n_neighbors=2

Estimator = KNeighborsClassifier(n_neighbors=2)
Estimator.fit(X_train, y_train)
Y_predicted = Estimator.predict(X_test)
accuracy = np.mean(y_test == Y_predicted) * 100
pre_result = np.zeros_like(Y_predicted, dtype=str)
pre_result[Y_predicted == 1] = 'g'
pre_result[Y_predicted == 0] = 'b'
print(pre_result)
print("The accuracy is {0:.1f}%".format(accuracy))

程序运行结果如下:
在这里插入图片描述
如图,预测准确率达92.0%。

目录
相关文章
|
3天前
|
机器学习/深度学习 算法 数据处理
探索机器学习中的决策树算法
【5月更文挑战第18天】探索机器学习中的决策树算法,一种基于树形结构的监督学习,常用于分类和回归。算法通过递归划分数据,选择最优特征以提高子集纯净度。优点包括直观、高效、健壮和可解释,但易过拟合、对连续数据处理不佳且不稳定。广泛应用于信贷风险评估、医疗诊断和商品推荐等领域。优化方法包括集成学习、特征工程、剪枝策略和参数调优。
|
5天前
|
机器学习/深度学习 算法 数据挖掘
【机器学习】K-means算法与PCA算法之间有什么联系?
【5月更文挑战第15天】【机器学习】K-means算法与PCA算法之间有什么联系?
|
5天前
|
机器学习/深度学习 算法 数据挖掘
【机器学习】维度灾难问题会如何影响K-means算法?
【5月更文挑战第15天】【机器学习】维度灾难问题会如何影响K-means算法?
|
6天前
|
机器学习/深度学习 算法 数据挖掘
【机器学习】聚类算法中,如何判断数据是否被“充分”地聚类,以便算法产生有意义的结果?
【5月更文挑战第14天】【机器学习】聚类算法中,如何判断数据是否被“充分”地聚类,以便算法产生有意义的结果?
|
6天前
|
机器学习/深度学习 存储 搜索推荐
利用机器学习算法改善电商推荐系统的效率
电商行业日益竞争激烈,提升用户体验成为关键。本文将探讨如何利用机器学习算法优化电商推荐系统,通过分析用户行为数据和商品信息,实现个性化推荐,从而提高推荐效率和准确性。
|
6天前
|
机器学习/深度学习 算法 搜索推荐
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
|
6天前
|
机器学习/深度学习 算法 数据可视化
实现机器学习算法时,特征选择是非常重要的一步,你有哪些推荐的方法?
实现机器学习算法时,特征选择是非常重要的一步,你有哪些推荐的方法?
34 1
|
6天前
|
机器学习/深度学习 数据采集 算法
解码癌症预测的密码:可解释性机器学习算法SHAP揭示XGBoost模型的预测机制
解码癌症预测的密码:可解释性机器学习算法SHAP揭示XGBoost模型的预测机制
165 0
|
6天前
|
机器学习/深度学习 数据采集 监控
机器学习-特征选择:如何使用递归特征消除算法自动筛选出最优特征?
机器学习-特征选择:如何使用递归特征消除算法自动筛选出最优特征?
107 0
|
6天前
|
机器学习/深度学习 人工智能 算法
探索机器学习中的支持向量机(SVM)算法
【2月更文挑战第20天】 在数据科学与人工智能的领域中,支持向量机(SVM)是一种强大的监督学习算法,它基于统计学习理论中的VC维理论和结构风险最小化原理。本文将深入探讨SVM的核心概念、工作原理以及实际应用案例。我们将透过算法的数学原理,揭示如何利用SVM进行有效的数据分类与回归分析,并讨论其在处理非线性问题时的优势。通过本文,读者将对SVM有更深层次的理解,并能够在实践中应用这一算法解决复杂的数据问题。
24 0