当前位置:   article > 正文

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

简单模型训练的例子

参考文献:

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

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

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

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

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

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

调用DecisionTreeClassifier训练模型示例代码:
  1. from sklearn.datasets import load_iris
  2. #鸢尾花数据集
  3. from sklearn.tree import DecisionTreeClassifier
  4. #决策分类树
  5. X, y=load_iris(return_X_y=TRUE)
  6. #X为数据集,y为真实值
  7. clf=DecisionTreeClasifier().fit(X,y)
  8. #clf为训练好的分类模型
  9. y_pre=clf.predict(X)
  10. #预测值
  11. Sco=clf.score(X,y)
  12. #性能评估器评分,1.0为全部分类正确,0.0为全部分类错误
运行结果展示:

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

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

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

调用SVC类训练模型代码示例:
  1. from sklearn.datasets import load_iris
  2. #从Scikit-Learn库导入支持向量机算法
  3. from sklearn.svm import SVC
  4. #载入鸢尾花数据集
  5. X, y = load_iris(return_X_y=True)
  6. #训练模型
  7. clf = SVC().fit(X, y)
  8. #X为数据集,y为真实值
  9. y_pre=clf.predict(X)
  10. #预测值
  11. Sco=clf.score(X,y)
  12. #性能评估
  13. Ker=clf.kernel
  14. #默认为径向基rbf,可通过kernel查看
运行结果展示:

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

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

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

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

神经网络分类算法MLPClassifier训练模型代码示例:
  1. #从Scikit-Learn库导入鸢尾花数据集
  2. from sklearn.datasets import load_iris
  3. #从Scikit-Learn库导入神经网络模型中的神经网络分类算法
  4. from sklearn.neural_network import MLPClassifier
  5. #载入鸢尾花数据集
  6. X, y = load_iris(return_X_y=True)
  7. #训练模型
  8. clf = MLPClassifier().fit(X, y)
  9. #使用模型进行分类预测
  10. y_pre=clf.predict(X)
  11. #性能评估
  12. Sco=clf.score(X,y)
  13. # 使用临时目录来存储图片文件
  14. with tempfile.TemporaryDirectory() as tmpdir:
  15. # 将预测结果y_pre和真实值y的关系图保存为PNG文件
  16. plt.scatter(y_pre, y)
  17. plt.xlabel('预测值')
  18. plt.ylabel('真实值')
  19. plt.savefig(os.path.join(tmpdir, '预测值与真实值关系图.png'))
  20. # 将图片文件读取为二进制数据
  21. with open(os.path.join(tmpdir, '预测值与真实值关系图.png'), 'rb') as f:
  22. image_data = f.read()
  23. # 将二进制数据写入新生成的文件中
  24. with open('预测值与真实值关系图.png', 'wb') as f:
  25. f.write(image_data)
运行结果展示:

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

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

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

RandomForestClassifier随机森林分类算法训练模型代码示例:
  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. import tempfile
  4. import os
  5. #若使用在线编译器,可避免交互环境出现问题
  6. plt.switch_backend('agg')
  7. # 从Scikit-Learn库导入鸢尾花数据集
  8. from sklearn.datasets import load_iris
  9. # 从Scikit-Learn库导入随机森林分类算法
  10. from sklearn.ensemble import RandomForestClassifier
  11. # 载入鸢尾花数据集
  12. X, y = load_iris(return_X_y=True)
  13. # 训练模型
  14. clf = RandomForestClassifier().fit(X, y)
  15. # 使用模型进行分类预测
  16. y_pre=clf.predict(X)
  17. # 性能评估
  18. Sco=clf.score(X,y)
  19. #查看随机森林算法中以决策树作为弱学习器的详细信息
  20. detail_decisiontree=clf.estimators_
  21. # 使用临时目录来存储图片文件
  22. with tempfile.TemporaryDirectory() as tmpdir:
  23. # 将预测结果y_pre和真实值y的关系图保存为PNG文件
  24. plt.scatter(y_pre, y)
  25. plt.xlabel('预测值')
  26. plt.ylabel('真实值')
  27. # 添加直线表示它们俩的相关关系
  28. # 首先,计算相关系数
  29. corr = np.corrcoef(y_pre, y)[0, 1]
  30. # 然后,计算直线的斜率和截距
  31. slope = corr * np.std(y) / np.std(y_pre)
  32. intercept = np.mean(y) - slope * np.mean(y_pre)
  33. # 最后,画出直线
  34. plt.plot([min(y_pre), max(y_pre)], [slope * min(y_pre) + intercept, slope * max(y_pre) + intercept], color='red')
  35. plt.savefig(os.path.join(tmpdir, '预测值与真实值关系图.png'))
  36. # 将图片文件读取为二进制数据
  37. with open(os.path.join(tmpdir, '预测值与真实值关系图.png'), 'rb') as f:
  38. image_data = f.read()
  39. # 将二进制数据写入新生成的文件中
  40. with open('预测值与真实值关系图.png', 'wb') as f:
  41. f.write(image_data)
运行成功展示:

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

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

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

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

LogisticRegression类训练模型代码示例:
  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. import tempfile
  4. import os
  5. # 从Scikit-Learn库导入鸢尾花数据集
  6. from sklearn.datasets import load_iris
  7. # 从Scikit-Learn库导入LogisticRegression算法
  8. from sklearn.linear_model import LogisticRegression
  9. plt.switch_backend('agg')
  10. # 载入鸢尾花数据集
  11. X, y = load_iris(return_X_y=True)
  12. # 训练模型
  13. clf = LogisticRegression().fit(X, y)
  14. # 使用模型进行分类预测
  15. y_pre=clf.predict(X)
  16. # 性能评估
  17. Sco=clf.score(X,y)
  18. mm=0
  19. # 使用临时目录来存储图片文件
  20. with tempfile.TemporaryDirectory() as tmpdir:
  21. # 将预测结果y_pre和真实值y的关系图保存为PNG文件
  22. plt.scatter(y_pre, y)
  23. plt.xlabel('预测值')
  24. plt.ylabel('真实值')
  25. # 添加直线表示它们俩的相关关系
  26. # 首先,计算相关系数
  27. corr = np.corrcoef(y_pre, y)[0, 1]
  28. # 然后,计算直线的斜率和截距
  29. slope = corr * np.std(y) / np.std(y_pre)
  30. intercept = np.mean(y) - slope * np.mean(y_pre)
  31. # 最后,画出直线
  32. plt.plot([min(y_pre), max(y_pre)], [slope * min(y_pre) + intercept, slope * max(y_pre) + intercept], color='red')
  33. plt.savefig(os.path.join(tmpdir, '预测值与真实值关系图.png'))
  34. # 将图片文件读取为二进制数据
  35. with open(os.path.join(tmpdir, '预测值与真实值关系图.png'), 'rb') as f:
  36. image_data = f.read()
  37. # 将二进制数据写入新生成的文件中
  38. with open('预测值与真实值关系图.png', 'wb') as f:
  39. 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聚类训练无监督模型代码:
  1. #导入绘图库
  2. import matplotlib.pyplot as plt
  3. #从Scikit-Learn库导入聚类模型中的K-means聚类算法,属于无监督学习
  4. from sklearn.cluster import KMeans
  5. #导入聚类数据生成工具
  6. from sklearn.datasets import make_blobs
  7. #用sklearn自带的make_blobs方法生成聚类测试数据
  8. n_samples = 1500
  9. #该聚类数据集共1500个样本
  10. X, y = make_blobs(n_samples=n_samples)
  11. #进行聚类,这里n_clusters设定为3,也即聚成3个簇
  12. y_pred=KMeans(n_clusters=3).fit_predict(X)
  13. #用点状图显示聚类效果
  14. plt.scatter(X[:, 0], X[:, 1], c=y_pred)
  15. plt.show()
  16. ############或者生成一张图
  17. import matplotlib.pyplot as plt
  18. from sklearn.cluster import KMeans
  19. from sklearn.datasets import make_blobs
  20. import numpy as np
  21. import tempfile
  22. import os
  23. # 从Scikit-Learn库导入聚类模型中的K-means聚类算法,属于无监督学习
  24. from sklearn.cluster import KMeans
  25. # 导入聚类数据生成工具
  26. from sklearn.datasets import make_blobs
  27. # 用sklearn自带的make_blobs方法生成聚类测试数据
  28. n_samples = 1500
  29. # 该聚类数据集共1500个样本
  30. X, y = make_blobs(n_samples=n_samples)
  31. # 进行聚类,这里n_clusters聚成3个簇
  32. y_pred = KMeans(n_clusters=3).fit_predict(X)
  33. # 使用临时目录来存储图片文件
  34. with tempfile.TemporaryDirectory() as tmpdir:
  35. # 将聚类效果图保存为PNG文件
  36. plt.scatter(X[:, 0], X[:, 1], c=y_pred)
  37. plt.savefig(os.path.join(tmpdir, '聚类效果图.png'))
  38. # 将图片文件读取为二进制数据
  39. with open(os.path.join(tmpdir, '聚类效果图.png'), 'rb') as f:
  40. image_data = f.read()
  41. # 将二进制数据写入新生成的文件中
  42. with open('聚类效果图_文件.png', 'wb') as f:
  43. f.write(image_data)
运行结果展示:

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

n_clusters=3:

n_clusters=6

n_clusters=9:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/875514
推荐阅读
相关标签
  

闽ICP备14008679号