相较于昨天的,今天的代码更加完善。
1.所需的库:
load_iris:用于加载鸢尾花(Iris)数据集
NeighborsClassifier:用于分类
train_test_split:用于划分数据集
StandardScaler:用于对数据集进行标准化处理
accuracy_score:用于计算分类任务的准确度
matplotlib.pyplot:主要用于绘制 2D 图形
seaborn:用来制作各种图表,对matplotlib的补充
pandas:用于数据处理和分析
2.大致过程
1. 获取数据集
2 .数据基本处理
3 .数据集预处理-数据标准化
4 .机器学习(模型训练)
5 .模型预测
6 .模型评估
接下来是完整的代码。
# 导入所需的库
from sklearn.datasets import load_iris
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
# 第一步:加载数据集
mydata = load_iris()
def dm01_irisdata_show():
# 把数据转换成dataframe格式 设置data, columns属性 目标值名称
mydata_df = pd.DataFrame(mydata['data'], columns=mydata.feature_names)
# print(mydata_df)
mydata_df['target'] = mydata.target
# sns.implot()显示
col1 = 'sepal length(cm)'
col2 = 'petal width(cm)'
sns.lmplot(x=col1, y=col2, data=mydata_df, hue='targets', fit_reg=False)
plt.xlabel(col1)
plt.ylabel(col2)
plt.title('iris')
plt.show()
# 第二步:数据基本处理
# 划分数据集
x_train, x_test, y_train, y_test = train_test_split(mydata.data, mydata.target, test_size=0.3, random_state=32)
# 查看数据情况
# print(f'数据总数量: {len(mydata.data)}')
# print(f'训练集中的x-特征值: {len(x_train)}')
# print(f'测试集中的x-特征值: {len(x_test)}')
# print(y_train)
# 第三步:数据集预处理
transformer = StandardScaler()
x_train = transformer.fit_transform(x_train)
x_test = transformer.fit_transform(x_test)
# 第四步:模型训练和预测
model = KNeighborsClassifier(n_neighbors=5)
model.fit(x_train, y_train)
# 第五步:模型预测
# print('通过模型查看分类类别-->', model.classes_)
per_data = [[5.4, 3.3, 1.6, 0.7], [4.3, 3.3, 1.4, 0.3]]# 随机给出一些数据
per_data =transformer.transform(per_data)
#print('mydata-->', mydata)
my_pred = model.predict(per_data)
print('mypred:', my_pred)
my_pred = model.predict_proba(per_data) # 获取这些样本属于每个类别的概率
print('mypred:', my_pred)
# 第六步:模型评估
y_predict = model.predict(x_test)
myresult = accuracy_score(y_test, y_predict)
print('myresult-->', myresult)
运行结果:
可以看出,我们预测时给出的数据,都被认为是第一种鸢尾花,模型正确率也是达到了93%。
mypred: [0 0]
mypred: [[0.8 0.2 0. ]
[1. 0. 0. ]]
myresult--> 0.9333333333333333