






代码
# 人工智能数据源下载地址:https://video.mugglecode.com/data_ai.zip,下载压缩包后解压即可(数据源与上节课相同)
# -*- coding: utf-8 -*-
"""
任务:鸢尾花识别
"""
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
DATA_FILE = './data_ai/Iris.csv'
SPECIES_LABEL_DICT = {
'Iris-setosa': 0, # 山鸢尾
'Iris-versicolor': 1, # 变色鸢尾
'Iris-virginica': 2 # 维吉尼亚鸢尾
}
# 使用的特征列
FEAT_COLS = ['SepalLengthCm', 'SepalWidthCm', 'PetalLengthCm', 'PetalWidthCm']
def main():
"""
主函数
"""
# 读取数据集
iris_data = pd.read_csv(DATA_FILE, index_col='Id')
iris_data['Label'] = iris_data['Species'].map(SPECIES_LABEL_DICT)
# 获取数据集特征
X = iris_data[FEAT_COLS].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)
model_dict = {'kNN': KNeighborsClassifier(n_neighbors=7),
'逻辑回归': LogisticRegression(C=1e5), #正则化参数
'SVM': SVC(C=1e5)} #正则化参数
for model_name, model in model_dict.items():
# 训练模型
model.fit(X_train, y_train)
# 验证模型
acc = model.score(X_test, y_test)
print('{}模型的预测准确率:{:.2f}%'.format(model_name, acc * 100))
if __name__ == '__main__':
main()
运行结果:
kNN模型的预测准确率:98.00%
逻辑回归模型的预测准确率:98.00%
SVM模型的预测准确率:92.00%
练习:使用kNN、逻辑回归和SVM进行水果类型识别
-
题目描述:使用kNN、逻辑回归和SVM进行水果类型识别
-
题目要求:
-
使用scikit-learn提供的kNN、逻辑回归和SVM进行分类操作
-
手动选择合适的模型超参数,包括kNN中的近邻个数k,逻辑回归和SVM中的正则项系数C值
-
数据文件:
-
数据源下载地址:https://video.mugglecode.com/fruit_data.csv(数据源与之前相同)
-
fruit_data.csv,包含了59个水果的的数据样本。
-
共5列数据
-
fruit_name:水果类别
-
mass: 水果质量
-
width: 水果的宽度
-
height: 水果的高度
-
color_score: 水果的颜色数值,范围0-1。
-
0.85 - 1.00:红色
-
0.75 - 0.85: 橙色
-
0.65 - 0.75: 黄色
-
0.45 - 0.65: 绿色
参考代码
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC
from sklearn.linear_model import LogisticRegression
#读取数据
data = pd.read_csv('./data_ai/fruit_data.csv')
#特征文字
feat_cols =['mass','width','height','color_score']
#预处理
fruit2num = {'apple' : 0 ,
'mandarin' : 1 ,
'orange' : 2 ,
'lemon' : 3
}
data['label'] = data['fruit_name'].map(fruit2num)
#取出X和y
X = data[feat_cols].values
y = data['label'].values
#划分数据
X_train_set, X_test_set ,y_train_set, y_test_set = train_test_split(X,y, random_state = 20, test_size= 1/5)
print('原始数据集共{}个样本,其中训练集样本数为{},测试集样本数为{}'.format(
X.shape[0], X_train_set.shape[0], X_test_set.shape[0]))
model_dict = {'kNN': KNeighborsClassifier(n_neighbors=3),
'逻辑回归': LogisticRegression(C=1e3),
'SVM': SVC(C=1e3)
}
for model_name, model in model_dict.items():
this_model = model
this_model.fit(X_train_set,y_train_set)
acc = this_model.score(X_test_set,y_test_set)
print(f'{model_name}模型的预测准确率:{acc*100}%')
运行结果
原始数据集共59个样本,其中训练集样本数为47,测试集样本数为12
kNN模型的预测准确率:91.66666666666666%
逻辑回归模型的预测准确率:83.33333333333334%
SVM模型的预测准确率:75.0%
网友评论