首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一个简单机器学习项目案例

首先,我们需要了解预测建模机器学习项目的所有部分是如何真正结合在一起的。接着,我们将使用Python完成一个简单机器学习项目。让我们开始:

加载一个数据集,并使用统计摘要和数据可视化来理解其结构

创建6个机器学习模型,选择最佳模型并保存以便后续使用

示例代码

# coding=utf-8

# 导入必要的库from pathlib import Path # 用于处理文件路径import pandas as pd # 数据处理和分析from pandas.plotting import scatter_matrix # 散点图矩阵绘制import matplotlib.pyplot as plt # 绘图工具from sklearn.model_selection import train_test_split, KFold, cross_val_score # 数据划分和交叉验证from sklearn.metrics import classification_report, confusion_matrix, accuracy_score # 评估指标from sklearn.linear_model import LogisticRegression #逻辑回归模型from sklearn.tree import DecisionTreeClassifier # 决策树模型from sklearn.neighbors import KNeighborsClassifier # K近邻模型from sklearn.discriminant_analysis import LinearDiscriminantAnalysis # 线性判别分析from sklearn.naive_bayes import GaussianNB #高斯朴素贝叶斯from sklearn.svm import SVC # 支持向量机import joblib # 用于模型的保存和加载

import warningswarnings.filterwarnings("ignore") # 忽略警告

###### 加载数据集filename = Path(__file__).parent / 'data/iris.csv'print(filename)names = ['sepal-length', 'sepal-width', 'pedal-length', 'pedal-width', 'class']data = pd.read_csv(filename, names=names, header=0)

###### 概括数据集# 查看数据集维度(即行数和列数)print(data.shape)# 查看数据集的前 20 行print(data.head(20))# 查看数据集的列名print(data.columns)# 查看数据集的列类型print(data.dtypes)# 查看数据集的统计信息print(data.describe())# 查看数据集的分类情况print(data.groupby('class').size())

###### 可视化数据集 ####### 绘制单变量箱线图"""在数据集data上绘制箱线图。:param kind: 指定绘图类型,此处为'box'表示箱线图。:param subplots: 是否为每个变量创建一个子图,True表示每个变量一个子图。:param layout: 指定子图的布局,此处为(2, 2)表示一个2行2列的布局。:param sharex: 是否在所有子图中共享x轴,False表示不共享。:param sharey: 是否在所有子图中共享y轴,False表示不共享。:returns: None。"""data.plot(kind='box', subplots=True, layout=(2, 2), sharex=False, sharey=False)plt.show()# 绘制单变量直方图data.hist(bins=10, color='brown')plt.show()# 绘制多变量散点图pd.plotting.scatter_matrix(data)plt.show()

# ###### 评估算法 ####### 将数据集分为输入数据和输出结果array = data.valuesX = array[:, :-1]y = array[:, -1]# 将数据集分为训练数据和测试数据"""根据给定的数据集X和标签集y,将数据集划分为训练集和测试集。

参数:- X: 表示特征的数据集,可以是多种格式。- y: 表示标签的数据集,与X对应。- test_size: 测试集所占总数据集的比例,默认为0.25。- random_state: 用于随机采样的种子值,确保结果的可复现性,默认为None。

返回值:- X_train: 训练集的特征部分。- X_test: 测试集的特征部分。- y_train: 训练集的标签部分。- y_test: 测试集的标签部分。"""X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=7)print(X_train.shape, X_test.shape, y_train.shape, y_test.shape)# 构建模型models = [('LR', LogisticRegression()), ('LDA', LinearDiscriminantAnalysis()), ('KNN', KNeighborsClassifier()), ('CART', DecisionTreeClassifier()), ('NB', GaussianNB()), ('SVM', SVC()),]results, names = [], []# 抽查模型算法for name, model in models: kfold = KFold(n_splits=10, random_state=3, shuffle=True) cv_results = cross_val_score(model, X_train, y_train, cv=kfold, scoring='accuracy') results.append(cv_results) names.append(name) print('%s: %f (%f)' % (name, cv_results.mean(), cv_results.std()))# 绘制算法的评估结果,从中比较评估结果,并挑选最好的算法fig = plt.figure()fig.suptitle('Algorithm Comparison')ax = fig.add_subplot(111)plt.boxplot(results)ax.set_xticklabels(names)plt.show()"""结果输出,如下LR: 0.975000 (0.038188)LDA: 0.975000 (0.053359)KNN: 0.991667 (0.025000)CART: 0.966667 (0.055277)NB: 0.966667 (0.066667)SVM: 0.975000 (0.038188)可以看出KNN算法的准确率最高,准确率0.991667,标准差0.025000。"""

###### 预测测试集(在测试集上进行预测和评估指标)######"""使用K近邻算法训练模型,并对测试集进行预测,最后打印出准确率、混淆矩阵和分类报告。

模型训练步骤包括:1. 初始化一个K近邻分类器对象;2. 使用训练数据集(X_train, y_train)拟合模型;3. 使用测试数据集(X_test)对模型进行预测,得到预测结果(y_pred)。

评估模型性能的步骤包括:1. 计算预测结果(y_pred)与真实结果(y_test)的准确率,并打印出来;2. 打印混淆矩阵,展示分类的正确性和错误类型;3. 打印分类报告,包含每个类的精确度、召回率和F1-score等指标。"""# 初始化K近邻分类器model_knn = KNeighborsClassifier()# 拟合模型model_knn.fit(X_train, y_train)# 对测试集进行预测y_pred = model_knn.predict(X_test)# 打印准确率print(accuracy_score(y_test, y_pred))# 打印混淆矩阵print(confusion_matrix(y_test, y_pred))# 打印分类报告print(classification_report(y_test, y_pred))

###### 保存模型 ######def save_model(model, model_name='best_model.pkl'): """ 保存模型到当前目录下的model子目录。 :param model: 要保存的模型对象 :param model_name: 模型文件名 """ try: model_path = Path(__file__).parent / 'model' / model_name model_path.parent.mkdir(parents=True, exist_ok=True) # 确保目录存在 joblib.dump(model, model_path) except Exception as e: print(f"保存模型时发生错误:{e}")

def load_model(model_name='best_model.pkl'): """ 从当前目录下的model子目录加载模型。 :param model_name: 模型文件名 :return: 加载的模型对象 """ try: model_path = Path(__file__).parent / 'model' / model_name return joblib.load(model_path) except Exception as e: print(f"加载模型时发生错误:{e}") return None

# 使用示例# model_knn = model_knn # 假设这里是模型训练的代码save_model(model_knn) # 保存模型model = load_model() # 加载模型print(model.predict([[5.1, 3.5, 1.4, 0.2]]))

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OWDv0tb33GBMKPQLM4FBwRnA0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券