机器学习训练模型简单示例

本文介绍了如何使用Scikit-Learn库在Python中通过决策树、支持向量机、神经网络和集成学习方法训练模型来判断鸢尾花种类。包括了具体代码示例和聚类分析,展示了不同算法在鸢尾花分类上的应用效果。
摘要由CSDN通过智能技术生成

参考文献:

书名:《机器学习算法的数学解析与Python实现》        作者:莫凡

出版社:机械工业出版社        出版时间:2020-01-01

(一)训练出能判断鸢尾花的模型

一、决策树训练出能判断鸢尾花的模型

Scikit-Learn库可用的决策树分类算法:

python提供的Scikit-Learn库的sklearn.tree包当中有两种解决分类问题的决策树算法DecisionTreeClassifier和ExtraTreeClassifier(用于离散化数据)、两种解决回归问题的决策树算法DecisionTreeRegressor和ExtraTreeRegressor(用于连续型数据)

调用DecisionTreeClassifier训练模型示例代码:
from sklearn.datasets import load_iris
    #鸢尾花数据集
from sklearn.tree import DecisionTreeClassifier
    #决策分类树

X, y=load_iris(return_X_y=TRUE)
    #X为数据集,y为真实值

clf=DecisionTreeClasifier().fit(X,y)
    #clf为训练好的分类模型

y_pre=clf.predict(X) 
    #预测值

Sco=clf.score(X,y)
    #性能评估器评分,1.0为全部分类正确,0.0为全部分类错误
运行结果展示:

二、支持向量机训练出能判断鸢尾花的模型

Scikit-Learn库可用的支持向量机方法:

LinearSVC(线性函数), LinearSVR(线性函数), NuSVC(可设置支持向量数量), NuSVR(可设置支持向量数量), OneClassSVM(无监督学习的异常点检测), SVR类(可选择多种核函数), SVC类(可选择多种核函数)

调用SVC类训练模型代码示例:
from sklearn.datasets import load_iris
    #从Scikit-Learn库导入支持向量机算法

from sklearn.svm import SVC
    #载入鸢尾花数据集

X, y = load_iris(return_X_y=True)
    #训练模型

clf = SVC().fit(X, y)
    #X为数据集,y为真实值

y_pre=clf.predict(X)
    #预测值

Sco=clf.score(X,y)
    #性能评估    

Ker=clf.kernel
    #默认为径向基rbf,可通过kernel查看
运行结果展示:

三、神经网络算法训练出能判断鸢尾花的模型

Scikit-Learn库可用的神经网络算法:

(Scikit-Learn库中multiple-layer perceptron指neural network algorithm)

MLPClassifier(用于分类问题), MLPRegressor(用于回归问题), BernoulliRBM(是基于Bernoulli Restricted Boltzmann Machine模型的神经网络分类算法)

神经网络分类算法MLPClassifier训练模型代码示例:
    #从Scikit-Learn库导入鸢尾花数据集
from sklearn.datasets import load_iris

    #从Scikit-Learn库导入神经网络模型中的神经网络分类算法
from sklearn.neural_network import MLPClassifier

    #载入鸢尾花数据集
X, y = load_iris(return_X_y=True)

    #训练模型
clf = MLPClassifier().fit(X, y)

    #使用模型进行分类预测
y_pre=clf.predict(X)

    #性能评估
Sco=clf.score(X,y)

    # 使用临时目录来存储图片文件
with tempfile.TemporaryDirectory() as tmpdir:
        # 将预测结果y_pre和真实值y的关系图保存为PNG文件
    plt.scatter(y_pre, y)
    plt.xlabel('预测值')
    plt.ylabel('真实值')
    plt.savefig(os.path.join(tmpdir, '预测值与真实值关系图.png'))

        # 将图片文件读取为二进制数据
    with open(os.path.join(tmpdir, '预测值与真实值关系图.png'), 'rb') as f:
        image_data = f.read()

    # 将二进制数据写入新生成的文件中
with open('预测值与真实值关系图.png', 'wb') as f:
    f.write(image_data)
运行结果展示:

四、集成学习方法训练出能判断鸢尾花的模型

Scikit-Learn库可用的集成学习方法:

RandomForestClassifier类(用于分类问题,以CART决策树算法作为弱学习器),RandomForestRegressor类(用于回归问题),ExtraTreeClassifier类(用于分类问题,使用极端随机树),ExtraTreeRegressor类(用于回归问题,使用极端随机树),AdaBoostClassifier类(用于分类问题),AdaBoostRegressor类(用于回归问题),GradientBoostingClassifier类(用于分类问题),GradientBoostingRegressor类(用于回归问题)

RandomForestClassifier随机森林分类算法训练模型代码示例:
import matplotlib.pyplot as plt
import numpy as np
import tempfile
import os

#若使用在线编译器,可避免交互环境出现问题
plt.switch_backend('agg')

    # 从Scikit-Learn库导入鸢尾花数据集
from sklearn.datasets import load_iris

    # 从Scikit-Learn库导入随机森林分类算法
from sklearn.ensemble import RandomForestClassifier

    # 载入鸢尾花数据集
X, y = load_iris(return_X_y=True)

    # 训练模型
clf = RandomForestClassifier().fit(X, y)

    # 使用模型进行分类预测
y_pre=clf.predict(X)

    # 性能评估
Sco=clf.score(X,y)

    #查看随机森林算法中以决策树作为弱学习器的详细信息
detail_decisiontree=clf.estimators_

    # 使用临时目录来存储图片文件
with tempfile.TemporaryDirectory() as tmpdir:
        # 将预测结果y_pre和真实值y的关系图保存为PNG文件
    plt.scatter(y_pre, y)
    plt.xlabel('预测值')
    plt.ylabel('真实值')

        # 添加直线表示它们俩的相关关系
            # 首先,计算相关系数
    corr = np.corrcoef(y_pre, y)[0, 1]
            # 然后,计算直线的斜率和截距
    slope = corr * np.std(y) / np.std(y_pre)
    intercept = np.mean(y) - slope * np.mean(y_pre)
            # 最后,画出直线
    plt.plot([min(y_pre), max(y_pre)], [slope * min(y_pre) + intercept, slope * max(y_pre) + intercept], color='red')

    plt.savefig(os.path.join(tmpdir, '预测值与真实值关系图.png'))

        # 将图片文件读取为二进制数据
    with open(os.path.join(tmpdir, '预测值与真实值关系图.png'), 'rb') as f:
        image_data = f.read()

    # 将二进制数据写入新生成的文件中
with open('预测值与真实值关系图.png', 'wb') as f:
    f.write(image_data)
运行成功展示:

五、LogisticRegression训练出能判断鸢尾花的模型

LogisticRegression解决分类问题构建线性模型:

输入LogisticRegression(也叫逻辑回归、逻辑斯谛回归、对数几率回归、sigmoid函数)的样本为负,需要使得线性模型输出的预测值小于0,越小越好;输入为正,需要使得线性模型输出的预测值大于0,越大越好

Logistic回归类别:LinearRegression类(OLS),Ridge类(岭回归,L2正则项),Lasso类(L1正则项),LogisticRegression类

LogisticRegression类训练模型代码示例:
import matplotlib.pyplot as plt
import numpy as np
import tempfile
import os

    # 从Scikit-Learn库导入鸢尾花数据集
from sklearn.datasets import load_iris

    # 从Scikit-Learn库导入LogisticRegression算法
from sklearn.linear_model import LogisticRegression

plt.switch_backend('agg')

    # 载入鸢尾花数据集
X, y = load_iris(return_X_y=True)

    # 训练模型
clf = LogisticRegression().fit(X, y)

    # 使用模型进行分类预测
y_pre=clf.predict(X)

    # 性能评估
Sco=clf.score(X,y)

mm=0

    # 使用临时目录来存储图片文件
with tempfile.TemporaryDirectory() as tmpdir:
        # 将预测结果y_pre和真实值y的关系图保存为PNG文件
    plt.scatter(y_pre, y)
    plt.xlabel('预测值')
    plt.ylabel('真实值')

        # 添加直线表示它们俩的相关关系
            # 首先,计算相关系数
    corr = np.corrcoef(y_pre, y)[0, 1]
            # 然后,计算直线的斜率和截距
    slope = corr * np.std(y) / np.std(y_pre)
    intercept = np.mean(y) - slope * np.mean(y_pre)
            # 最后,画出直线
    plt.plot([min(y_pre), max(y_pre)], [slope * min(y_pre) + intercept, slope * max(y_pre) + intercept], color='red')

    plt.savefig(os.path.join(tmpdir, '预测值与真实值关系图.png'))

        # 将图片文件读取为二进制数据
    with open(os.path.join(tmpdir, '预测值与真实值关系图.png'), 'rb') as f:
        image_data = f.read()

    # 将二进制数据写入新生成的文件中
with open('预测值与真实值关系图.png', 'wb') as f:
    f.write(image_data)
运行结果展示:

(二)K-means聚类训练模型

K-means聚类原理:

step one: K个质心(初始的K个质心是随机选取的,非第一次循环的K个质心是由上一次循环产生的)-->将其他数据点(样本点当中除开与质心取值相同的点)归为与其距离最近的质点所在的簇,聚成K个簇

step two: 在K个簇中,以各个簇内所有样本点的维度值均值作为各个簇的新质心,得到K个质心

step three: 循环step one和step two,循环停止条件为“K个质心不再变化”

K-means聚类训练无监督模型代码:
    #导入绘图库
import matplotlib.pyplot as plt

    #从Scikit-Learn库导入聚类模型中的K-means聚类算法,属于无监督学习
from sklearn.cluster import KMeans

    #导入聚类数据生成工具
from sklearn.datasets import make_blobs

    #用sklearn自带的make_blobs方法生成聚类测试数据
n_samples = 1500

    #该聚类数据集共1500个样本
X, y = make_blobs(n_samples=n_samples)

    #进行聚类,这里n_clusters设定为3,也即聚成3个簇
y_pred=KMeans(n_clusters=3).fit_predict(X)

    #用点状图显示聚类效果
plt.scatter(X[:, 0], X[:, 1], c=y_pred)

plt.show()

############或者生成一张图

import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
import numpy as np
import tempfile
import os

    # 从Scikit-Learn库导入聚类模型中的K-means聚类算法,属于无监督学习
from sklearn.cluster import KMeans

    # 导入聚类数据生成工具
from sklearn.datasets import make_blobs

    # 用sklearn自带的make_blobs方法生成聚类测试数据
n_samples = 1500

    # 该聚类数据集共1500个样本
X, y = make_blobs(n_samples=n_samples)

    # 进行聚类,这里n_clusters聚成3个簇
y_pred = KMeans(n_clusters=3).fit_predict(X)

    # 使用临时目录来存储图片文件
with tempfile.TemporaryDirectory() as tmpdir:
        # 将聚类效果图保存为PNG文件
    plt.scatter(X[:, 0], X[:, 1], c=y_pred)
    plt.savefig(os.path.join(tmpdir, '聚类效果图.png'))

        # 将图片文件读取为二进制数据
    with open(os.path.join(tmpdir, '聚类效果图.png'), 'rb') as f:
        image_data = f.read()

    # 将二进制数据写入新生成的文件中
with open('聚类效果图_文件.png', 'wb') as f:
    f.write(image_data)
运行结果展示:

综合效果,n_clusters=3时聚类效果最好

n_clusters=3:

n_clusters=6

n_clusters=9:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值