首页人工智能Scikit-learn2.使用 scikit-l...

2.使用 scikit-learn 的 kNN (k-近邻算法)分类算法实现鸢尾花分类

1.数据:

依旧使用经典的Iris数据集。

2.任务:

使用 kNN(k-近邻算法)分类算法实现鸢尾花分类。

3.方法:

使用机器学习工具库scikit-learn中的以下方法。

  • 数据集划分:train_test_split()
  • 计算k-近邻距离:

3.1 kNN(k-NearestNeighbor)

kNN(k-NearestNeighbor),k-近邻算法是一种基于样本/实例的算法。

步骤:

  • 计算出测试样本和所有训练样本的距离;
  • 为测试样本选择k个与其距离最小的训练样本;
  • 统计出k个训练样本中大多数样本所属的分类;
  • 这个分类就是待分类数据所属的分类。

通用代码模式:

  • KNeighborsClassifier(),默认k=5,申明模型;
  • fit(),训练模型;
  • score(),计算得分

4.代码:

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier


data_file = './data/Iris.csv'

# 使用特征列
feature_columns = ['SepalLengthCm', 'SepalWidthCm', 'PetalLengthCm', 'PetalWidthCm']

# 类别列
Species_dict = {
	'Iris-setosa':0,  # 山鸢尾
	'Iris-versicolor':1,  # 变色鸢尾
	'Iris-virginica':2 # 维吉尼亚鸢尾
}


def main():
	"""
		主函数
	"""
	# 读取数据,将Id列设置为索引列
	iris_data = pd.read_csv(data_file,index_col='Id')
	# 使用map()函数将类别转变为相对应的数字
	iris_data['Label'] = iris_data['Species'].map(Species_dict)

	# 获取数据集特征
	X = iris_data[feature_columns].values
	# 获取数据标签
	y = iris_data['Label'].values

	# 划分数据集
	X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=1/3,random_state=10)

	# 声明模型
	knn_model = KNeighborsClassifier()
	# 训练模型
	knn_model.fit(X_train,y_train)
	# 评价模型
	accuracy = knn_model.score(X_test,y_test)
	print('模型准确率为:{:.2f}'.format(accuracy * 100))


	# 获取单个测试样本
	idx = 10
	test_sanple_feature = [X_test[idx,:]]
	# 真实标签
	y_true = y_test[idx]
	# 获取样本的预测标签
	y_predict = knn_model.predict(test_sanple_feature)
	print('样本{}的真实标签为{},预测标签为{}'.format(idx,y_true,y_predict))

if __name__ == '__main__':
	main()

5.输出结果:

模型准确率为:96.00
样本10的真实标签为1,预测标签为[1]
RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments