import pandas as pd
from sklearn.model_selection import train_test_split
from scipy.spatial.distance import euclidean
import numpy as np
DATA_FILE = './data_ai/Iris.csv'
SPECIES = ['Iris-setosa',       # 山鸢尾
           'Iris-versicolor',   # 变色鸢尾
           'Iris-virginica'     # 维吉尼亚鸢尾
           ]
# 使用的特征列
FEAT_COLS = ['SepalLengthCm', 'SepalWidthCm', 'PetalLengthCm', 'PetalWidthCm']
def get_pred_label(test_sample_feat, train_data):
    """
        “近朱者赤” 找最近距离的训练样本,取其标签作为预测样本的标签
    """
    dis_list = []
    for idx, row in train_data.iterrows():
        # 训练样本特征
        train_sample_feat = row[FEAT_COLS].values
        # 计算距离
        dis = euclidean(test_sample_feat, train_sample_feat)
        dis_list.append(dis)
    # 最小距离对应的位置
    pos = np.argmin(dis_list)
    pred_label = train_data.iloc[pos]['Species']
    return pred_label
def main():
    """
        主函数
    """
    # 读取数据集
    iris_data = pd.read_csv(DATA_FILE, index_col='Id')
    # 划分数据集
    train_data, test_data = train_test_split(iris_data, test_size=1/3, random_state=10)
    # 预测对的个数
    acc_count = 0
    # 分类器
    for idx, row in test_data.iterrows():
        # 测试样本特征
        test_sample_feat = row[FEAT_COLS].values
        # 预测值
        pred_label = get_pred_label(test_sample_feat, train_data)
        # 真实值
        true_label = row['Species']
        print('样本{}的真实标签{},预测标签{}'.format(idx, true_label, pred_label))
        if true_label == pred_label:
            acc_count += 1
    # 准确率
    accuracy = acc_count / test_data.shape[0]
    print('预测准确率{:.2f}%'.format(accuracy * 100))
if __name__ == '__main__':
    main()
鸢尾花的简单分类器
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
 平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 人工智能数据源下载地址,下载压缩包后解压即可.小脚本下载地址 原理 数据集分开,一部分用来训练集合,一部分作为测试...
- SVM的章节已经讲完,具体内容请参考:《01 SVM - 大纲》 《14 SVM - 代码案例一 - 鸢尾花数据S...