鸢尾花案例:分类问题

鸢尾花案例,分类问题。利用sklearn预置数据集进行案例练习。鸢尾花数据集里有鸢尾花特征,通过这些特征可以判断样本属于那一类型的鸢尾花。

from sklearn.datasets import load_iris
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score

# 1、加载sklearn预置的数据集,鸢尾花
iris_data = load_iris()
# print(iris_data)
# print(iris_data.data)
# print(iris_data.target)

# 2、将获取数据集中的部分内容,组成DataFrame。原数据集是json格式,取data字段作为特征列,列名取feature_names字段
# 增加label列作为标签,取target字段
iris_df = pd.DataFrame(iris_data['data'], columns=iris_data.feature_names)
iris_df['label'] = iris_data.target
# print(iris_df.head(5))
# print(iris_data.feature_names)

# 3、画图,指定xy轴名称,这个名称要求是数据集中存在的,可查看feature_names字段,数据是iris_df,hue颜色是label
# 这一步是对陌生数据理解过程,找出数据中的规律,但不是模型训练的必要步骤
# sns.lmplot(x='sepal length (cm)',y='sepal width (cm)',data=iris_df,hue='label')
# plt.show()

# 4、划分数据集,即划分训练集、测试集,一般是8:2、7:3
# test_size测试集大小,random_state随机数种子
# train_test_split(特征、目标值、测试集大小、随机数种子)
# train_test_split返回值的接收顺序是固定的
x_train, x_test, y_train, y_test = train_test_split(iris_data.data, iris_data.target, test_size=0.3, random_state=22)
# print(len(iris_data.data))
# print(len(x_train))

# 5、特征预处理,标准化。先创建标准化对象,训练集特征、测试集特征调用方法是不一样的
process = StandardScaler()
x_train = process.fit_transform(x_train)
x_test = process.transform(x_test)

# 6、训练模型,将训练集特征、目标值传入进行训练
model = KNeighborsClassifier(n_neighbors=3)
model.fit(x_train,y_train)

# 7、模型预测、评估
# 自定义了一个测试样本x
# 同时要将x进行标准化处理,达到与训练集数据一致的水平,transform
# 将标准化后的x传入模型进行预测,并得到目标值,predict
# predict_proba方法,[[1. 0. 0.]],是指目标值0,1,2那么0为1.是最接近的目标值,即目标值是0
x = [[5.1,3.5,1.4,0.2]]
x = process.transform(x)
y_predict = model.predict(x)

print(y_predict)
print(model.predict_proba(x))

# 模型评估
# 使用测试集进行模型评估,最终输出acc得分
# y_predict = model.predict(x_test)
# acc = accuracy_score(y_test,y_predict)
# print(acc)