Day17_【机器学习—在线数据集 鸢尾花案例】
机器学习建模流程:
- 加载数据——在线数据集,鸢尾花数据,150条 ,dm01_loadiris(),dm04_模型评估与预测()
- 数据的预处理——数据集分区(训练集和测试集),dm03_traintest_split(),dm04_模型评估与预测()
- 特征工程——特征预处理(数据标准化),dm04_模型评估与预测()
- 模型训练(机器学习),dm04_模型评估与预测()
- 模型预测和评估——dm04_模型评估与预测()
from sklearn.datasets import load_iris # 在线数据集 150条from sklearn.model_selection import train_test_split # 分割训练集和测试集from sklearn.preprocessing import StandardScaler # 数据标准化from sklearn.neighbors import KNeighborsClassifier # KNN算法 分类对象,因为鸢尾花是分类的场景采用三分法from sklearn.metrics import accuracy_score # 模型评估 计算模型准确率# 以下三个库 展示数据可视化,目的:观察数据在模型上的分布情况,是否存在异常值import seaborn as snsimport pandas as pdimport matplotlib.pyplot as plt# 加载鸢尾花 在线数据集def dm01_loadiris(): # 加载数据 iris_data = load_iris() ## print(iris_data) #此行会打印出以下keys和keys的具体内容,以如下更清晰的方式展示重点数据 # 数据的键,也就是它的主要组成部分的名称 print(iris_data.keys()) # 数据特征名 print(iris_data.feature_names) # 数据前5行 特征值 print(iris_data.data[:5]) # 数据标签名 print(iris_data.target_names) # 数据前52行 标签值 print(iris_data.target[:52])# 2、数据的可视化:定义函数 dm02_show_iris()def dm02_show_iris(): # 1、加载数据 iris_data = load_iris() # 2、把上述的数据封装df对象 iris_df = pd.DataFrame(iris_data.data, columns=iris_data.feature_names) # 3、给df对象新增一个标签列 iris_df[\'label\'] = iris_data.target # print(iris_df) # 4、具体做可视化(了解) # 参1:数据 iris_df # 参2:x轴值 花瓣长度 # 参3:y轴值 花瓣宽度 # 参4:hue 颜色(根据鸢尾花的标签的分组,显示不同颜色) # 参5:fit_reg=False 不绘制拟合回归线,True 绘制拟合回归线 sns.lmplot(data=iris_df, x=\"petal length (cm)\", y=\'petal width (cm)\', hue=\'label\', fit_reg=True) # 5、设置标题 plt.title(\"iris data\") plt.tight_layout() # 自动调整子图的参数 plt.show()# 数据集(训练集测试集)划分def dm03_traintest_split(): # 1、加载数据集 iris_data = load_iris() # 150条 训练集 和测试集 # 2、划分数据集 # iris_data.data ->特征 150条 # iris_data.target ->标签 150条 # test_size ->表示测试集占比 # random_state ->随机种子 如果种子一样,每次划分数据集都是一样的。 x_train, x_test, y_train, y_test = train_test_split(iris_data.data, iris_data.target, test_size=0.2, random_state=22) # print(f\"训练集,x-特征:{len(x_train)}\") # 120条 每条4个列(特征) # print(f\"测试集,x-特征:{len(x_test)}\")# 30条 每条4个列(特征) # print(f\"训练集,y-标签:{len(y_train)}\") # 120条 标签 # print(f\"测试集,y-标签:{len(y_test)}\") #30条 标签 print(f\"x_train:\\n{x_train}\") print(f\"x_test:\\n{x_test}\") print(f\"y_train:\\n{y_train}\") print(f\"y_test:\\n{y_test}\")def dm04_模型评估与预测(): # 1、获取数据集 iris_data = load_iris() # 2、数据预处理(数据集划分) x_train, x_test, y_train, y_test = train_test_split(iris_data.data, iris_data.target, test_size=0.2, random_state=22) # 3、特征工程之子工程_特征预处理(标准化) 演示!!因为源数据不存在量纲问题 # 3.1 创建标准化对象 transfer = StandardScaler() # 3.2 对特征列进行标准化 x_train:训练集特征 训练+转换 x_train = transfer.fit_transform(x_train) # 3.3 处理测试集 transform只有转换 x_test = transfer.transform(x_test) # 4、模型训练 -》机器学习 # 4.1 创建模型对象 es = KNeighborsClassifier(n_neighbors=5) # 4.2模型训练 es.fit(x_train, y_train) # 训练集特征 训练集标签 # 5、模型预测 返回值是模型的预测值:y_predict y_predict = es.predict(x_test) # 打印对比 print(f\"(测试集)预测结果为:{y_predict}\") # 30个预测标签 print(f\"(测试集)真实结果为:{y_test}\") # 30个真实标签 # 6.模型评估,两种方式 # print(f\"准确率:{es.score(x_test,y_test)}\") # 参1:测试集真实标签 参2:预测标签 print(f\"准确率:{accuracy_score(y_test, y_predict)}\")if __name__ == \'__main__\': dm01_loadiris() dm02_show_iris() dm03_traintest_split() dm04_模型评估与预测()