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...