赞
踩
书名:《机器学习算法的数学解析与Python实现》 作者:莫凡
出版社:机械工业出版社 出版时间:2020-01-01
python提供的Scikit-Learn库的sklearn.tree包当中有两种解决分类问题的决策树算法DecisionTreeClassifier和ExtraTreeClassifier(用于离散化数据)、两种解决回归问题的决策树算法DecisionTreeRegressor和ExtraTreeRegressor(用于连续型数据)
- 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为全部分类错误

LinearSVC(线性函数), LinearSVR(线性函数), NuSVC(可设置支持向量数量), NuSVR(可设置支持向量数量), OneClassSVM(无监督学习的异常点检测), SVR类(可选择多种核函数), 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库中multiple-layer perceptron指neural network algorithm)
MLPClassifier(用于分类问题), MLPRegressor(用于回归问题), BernoulliRBM(是基于Bernoulli Restricted Boltzmann Machine模型的神经网络分类算法)
- #从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)

RandomForestClassifier类(用于分类问题,以CART决策树算法作为弱学习器),RandomForestRegressor类(用于回归问题),ExtraTreeClassifier类(用于分类问题,使用极端随机树),ExtraTreeRegressor类(用于回归问题,使用极端随机树),AdaBoostClassifier类(用于分类问题),AdaBoostRegressor类(用于回归问题),GradientBoostingClassifier类(用于分类问题),GradientBoostingRegressor类(用于回归问题)
- 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(也叫逻辑回归、逻辑斯谛回归、对数几率回归、sigmoid函数)的样本为负,需要使得线性模型输出的预测值小于0,越小越好;输入为正,需要使得线性模型输出的预测值大于0,越大越好
Logistic回归类别:LinearRegression类(OLS),Ridge类(岭回归,L2正则项),Lasso类(L1正则项),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)

step one: K个质心(初始的K个质心是随机选取的,非第一次循环的K个质心是由上一次循环产生的)-->将其他数据点(样本点当中除开与质心取值相同的点)归为与其距离最近的质点所在的簇,聚成K个簇
step two: 在K个簇中,以各个簇内所有样本点的维度值均值作为各个簇的新质心,得到K个质心
step three: 循环step one和step two,循环停止条件为“K个质心不再变化”
- #导入绘图库
- 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:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。