怎么做短文网站,企业网站制作心得,网站建设市场报价,怎么找做网站的公司1、分类的分类
分类的分类#xff1f;没错#xff0c;分类也有不同的种类#xff0c;而且在数学建模、机器学习领域常常被混淆。
首先我们谈谈有监督学习#xff08;Supervised learning#xff09;和无监督学习#xff08;Unsupervised learning#xff09;#xff…
1、分类的分类
分类的分类没错分类也有不同的种类而且在数学建模、机器学习领域常常被混淆。
首先我们谈谈有监督学习Supervised learning和无监督学习Unsupervised learning是指有没有老师有没有纪委吗差不多。有老师就有正确解法就有标准答案有纪委就会树学习榜样还有反面教材。
有监督学习是指样本数据已经给出了正确的分类我们通过对正确分类的样本数据进行学习从中总结规律获取知识付诸应用。所以监督学习的样本数据既提供了特征值又提供了目标值通过回归Regression、分类Classification学习特征与目标之间的关系。回归是针对连续变量、连续数据分类是针对离散变量和布尔变量0-1。
无监督学习是指样本数据没有提供确定的分类属性没有老师没有标准答案样本数据中只有样本的特征值而没有目标值只能通过样本数据自身的特征一边摸索一边自我学习通过聚类Clustering方法来寻找和认识对象的相似性。
所以我们说到分类时其实有时是指分类Classification有时则是指聚类Clustering。
有监督学习有老师就有正确答案。虽然有时也会有模糊地带但总体说来还是有判定标准、有是非对错的只要与标准答案不一致就会被认为判断错误。
无监督学习则不同可以有不同的分类方法、不同的分类结果通常只有相对的好坏而没有绝对的对错。甚至连分类结果的好坏也是相对的要根据实际需要实际情况进行综合考虑才能评价分类结果的好坏。谁能说人应该分几类怎么分更合理呢 欢迎关注 Youcans 原创系列每周更新数模笔记
Python数模笔记-PuLP库 Python数模笔记-StatsModels统计回归 Python数模笔记-Sklearn Python数模笔记-NetworkX Python数模笔记-模拟退火算法 2、聚类分析
2.1 聚类的分类
聚类是从数据分析的角度对大量的、多维的、无标记的样本数据集按照样本数据自身的相似性对数据集进行分类。大量是指样本的数量大多维是指每个样本都有很多特征值无标记是指样本数据对于每个样本没有指定的类别属性。
需要说明的是有时样本数据带有一个或多个分类属性但那并不是我们所要研究的类别属性才会被称为无监督学习。比如说体能训练数据集中每个样本都有很多特征数据包括性别、年龄也包括体重、腰围、心率和血压。性别、年龄显然都是样本的属性我们也可以根据性别属性把样本集分为男性、女性两类这当然是有监督学习但是如果我们是打算研究这些样本的生理变化与锻炼的关系这是性别就不定是唯一的分类属性甚至不一定是相关的属性了从这个意义上说样本数据中并没有给出我们所要进行分类的类别属性。
至于聚类的分类是针对研究对象的不同来说的。把样本集的行rows作为对象考察样本的相似度将样本集分成若干类称为 Q型聚类分析属于样本分类。把样本集的列columns作为对象考察各个特征变量之间的关联程度按照变量的相关性聚合为若干类称为 R型聚类分析属于因子分析。
2.2 Q型聚类分析样本聚类
Q 型聚类分析考察样本的相似度将样本集分成若干类。我们需要综合考虑样本各种特征变量的数值或类型找到一种分类方法将样本集分为若干类使每一类的样本之间具有较大的相似性又与其它类的样本具有较大的差异性。通常是根据不同样本之间的距离远近进行划分距离近者分为一类距离远者分成不同类以达到“同类相似异类相异”。 按照相似性分类首先就要定义什么是相似。对于任意两个样本很容易想到以样本间的距离作为衡量相似性的指标。在一维空间中两点间的距离是绝对值d(a,b)abs[x(a)-x(b)]二维空间中两点间的距离我们最熟悉的是欧几里德Euclid距离d(a,b)sqrt[(x1(a)-x1(b))**2(x2(a)-x2(b))**2]欧式距离也可以拓展到多维空间。 除了欧式距离之外还有其它度量样本间距的方案例如闵可夫斯基距离Minkowski、切比雪夫距离Chebyshev、马氏距离Mahalanobis等。这些距离的定义、公式和使用条件本文就不具体介绍了。世界是丰富多彩的问题是多种多样的对于特殊问题有时就要针对其特点采用特殊的解决方案。 进而对于两组样本G1、G2也需要度量类与类之间的相似性程度。常用的方法有最短距离法Nearest Neighbor or Single Linkage Method、最长距离法Farthest Neighbor or Complete Linkage Method、重心法Centroid Method、类均值法Group Average Method、离差平方和法Sum of Squares Method。 另外处理实际问题时在计算距离之前要对数据进行标准化、归一化解决不同特征之间的统一量纲、均衡权重。 3、SKlearn 中的聚类方法
SKlearn 工具包提供了多种聚类分析算法原型聚类方法Prototype、密度聚类方法Density、层次聚类方法Hierarchical、模型聚类Model等等原型聚类方法又包括 k均值算法K-Means、学习向量量化算法LVQ、高斯混合算法Gaussian Mixture。详见下表。 为什么会有这么多方法和算法呢因为特殊问题需要针对其特点采用特殊的解决方案。看看下面这张图就能理解这句话了也能理解各种算法都是针对哪种问题的。SKlearn 还提供了十多个聚类评价指标本文就不再展开介绍了。 4、K-均值K-Means聚类算法
K-均值聚类算法是最基础的、应用最广泛的聚类算法也是最快速的聚类算法之一。
4.1 原理和过程
K-均值聚类算法以最小化误差函数为目标将样本数据集分为 K类。
K-均值聚类算法的计算过程如下
设定 K 个类别的中心的初值计算每个样本到 K个中心的距离按最近距离进行分类以每个类别中样本的均值更新该类别的中心重复迭代以上步骤直到达到终止条件迭代次数、最小平方误差、簇中心点变化率。
K-均值聚类算法的优点是原理简单、算法简单速度快聚类效果极好对大数据集具有很好的伸缩性。这些优点特别有利于初学者、常见问题。其缺点是需要给定 K值对一些特殊情况如非凸簇、特殊值、簇的大小差别大的性能不太好。怎么看这些缺点需要给定 K值的问题是有解决方法的至于特殊情况已经跟我们没什么关系了。
4.2 SKlearn 中 K-均值算法的使用
sklearn.cluster.KMeans 类是 K-均值算法的具体实现官网介绍详见https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html#sklearn.cluster.KMeans class sklearn.cluster.KMeans(n_clusters8, *, init‘k-means’, n_init10, max_iter300, tol0.0001, precompute_distances‘deprecated’, verbose0, random_stateNone, copy_xTrue, n_jobs‘deprecated’, algorithm‘auto’) KMeans 的主要参数
n_clusters: int,default8 K值给定的分类数量默认值 8。init{‘k-means’, ‘random’} 初始中心的选择方式默认’K-means是优化值也可以随机选择或自行指定。n_initint, default10 以不同的中心初值多次运行以降低初值对算法的影响。默认值 10。max_iterint, default300 最大迭代次数。默认值 300。algorithm{“auto”, “full”, “elkan”}, default”auto” 算法选择full是经典的 EM算法“elkan能快速处理定义良好的簇默认值 “auto目前采用elkan”。
KMeans 的主要属性
**clustercenters**每个聚类中心的坐标labels_ 每个样本的分类结果inertia_ 每个点到所属聚类中心的距离之和。
4.3 sklearn.cluster.KMeans 用法实例
from sklearn.cluster import KMeans # 导入 sklearn.cluster.KMeans 类
import numpy as np
X np.array([[1,2], [1,4], [1,0], [10,2], [10,4], [10,0]])
kmCluster KMeans(n_clusters2).fit(X) # 建立模型并进行聚类设定 K2
print(kmCluster.cluster_centers_) # 返回每个聚类中心的坐标
#[[10., 2.], [ 1., 2.]] # print 显示聚类中心坐标
print(kmCluster.labels_) # 返回样本集的分类结果
#[1, 1, 1, 0, 0, 0] # print 显示分类结果
print(kmCluster.predict([[0, 0], [12, 3]])) # 根据模型聚类结果进行预测判断
#[1, 0] # print显示判断结果样本属于哪个类别
# 关注 Youcans分享原创系列 https://blog.csdn.net/youcans 例程很简单又给了详细注释就不再解读了。核心程序就是下面这句 kMeanModel KMeans(n_clusters2).fit(X) 4.4 针对大样本集的改进算法Mini Batch K-Means
对于样本集巨大的问题例如样本量大于 10万、特征变量大于100K-Means算法耗费的速度和内存很大。SKlearn 提供了针对大样本集的改进算法 Mini Batch K-Means并不使用全部样本数据而是每次抽样选取小样本集进行 K-Means聚类进行循环迭代。Mini Batch K-Means 虽然性能略有降低但极大的提高了运行速度和内存占用。 class sklearn.cluster.MiniBatchKMeans 类是算法的具体实现官网介绍详见https://scikit-learn.org/stable/modules/generated/sklearn.cluster.MiniBatchKMeans.html#sklearn.cluster.MiniBatchKMeans class sklearn.cluster.MiniBatchKMeans(n_clusters8, *, init‘k-means’, max_iter100, batch_size100, verbose0, compute_labelsTrue, random_stateNone, tol0.0, max_no_improvement10, init_sizeNone, n_init3, reassignment_ratio0.01) MiniBatchKMeans 与 KMeans不同的主要参数是
batch_size: int, default100 抽样集的大小。默认值 100。
Mini Batch K-Means 的用法实例如下
from sklearn.cluster import MiniBatchKMeans # 导入 .MiniBatchKMeans 类
import numpy as np
X np.array([[1,2], [1,4], [1,0], [4,2], [4,0], [4,4],[4,5], [0,1], [2,2],[3,2], [5,5], [1,-1]])
# fit on the whole data
mbkmCluster MiniBatchKMeans(n_clusters2,batch_size6,max_iter10).fit(X)
print(mbkmCluster.cluster_centers_) # 返回每个聚类中心的坐标
# [[3.96,2.41], [1.12,1.39]] # print 显示内容
print(mbkmCluster.labels_) # 返回样本集的分类结果
#[1 1 1 0 0 0 0 1 1 0 0 1] # print 显示内容
print(mbkmCluster.predict([[0,0], [4,5]])) # 根据模型聚类结果进行预测判断
#[1, 0] # 显示判断结果样本属于哪个类别
# 关注 Youcans分享原创系列 https://blog.csdn.net/youcans 5、K-均值算法例程
5.1 问题描述
- 聚类分析案例—我国各地区普通高等教育发展状况分析本问题及数据来自司守奎、孙兆亮数学建模算法与应用第2版国防工业出版社。 问题的原始数据来自《中国统计年鉴1995》和《中国教育统计年鉴1995》给出了各地区10 项教育发展数据。我国各地区普通高等教育的发展状况存在较大的差异请根据数据对我国各地区普通高等教育的发展状况进行聚类分析。
5.2 Python 程序 # Kmeans_sklearn_v1d.py
# K-Means cluster by scikit-learn for problem education2015
# v1.0d: K-Means 聚类算法SKlearn求解各地区高等教育发展状况-2015 问题
# 日期2021-05-10# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd
from sklearn.cluster import KMeans, MiniBatchKMeans# 主程序 关注 Youcans分享原创系列 https://blog.csdn.net/youcans
def main():# 读取数据文件readPath ../data/education2015.xlsx # 数据文件的地址和文件名dfFile pd.read_excel(readPath, header0) # 首行为标题行dfFile dfFile.dropna() # 删除含有缺失值的数据# print(dfFile.dtypes) # 查看 df 各列的数据类型# print(dfFile.shape) # 查看 df 的行数和列数print(dfFile.head())# 数据准备z_scaler lambda x:(x-np.mean(x))/np.std(x) # 定义数据标准化函数dfScaler dfFile[[x1,x2,x3,x4,x5,x6,x7,x8,x9,x10]].apply(z_scaler) # 数据归一化dfData pd.concat([dfFile[[地区]], dfScaler], axis1) # 列级别合并df dfData.loc[:,[x1,x2,x3,x4,x5,x6,x7,x8,x9,x10]] # 基于全部 10个特征聚类分析# df dfData.loc[:,[x1,x2,x7,x8,x9,x10]] # 降维后选取 6个特征聚类分析X np.array(df) # 准备 sklearn.cluster.KMeans 模型数据print(Shape of cluster data:, X.shape)# KMeans 聚类分析(sklearn.cluster.KMeans)nCluster 4kmCluster KMeans(n_clustersnCluster).fit(X) # 建立模型并进行聚类设定 K2print(Cluster centers:\n, kmCluster.cluster_centers_) # 返回每个聚类中心的坐标print(Cluster results:\n, kmCluster.labels_) # 返回样本集的分类结果# 整理聚类结果listName dfData[地区].tolist() # 将 dfData 的首列 地区 转换为 listNamedictCluster dict(zip(listName,kmCluster.labels_)) # 将 listName 与聚类结果关联组成字典listCluster [[] for k in range(nCluster)]for v in range(0, len(dictCluster)):k list(dictCluster.values())[v] # 第v个城市的分类是 klistCluster[k].append(list(dictCluster.keys())[v]) # 将第v个城市添加到 第k类print(\n聚类分析结果(分为{}类):.format(nCluster)) # 返回样本集的分类结果for k in range(nCluster):print(第 {} 类{}.format(k, listCluster[k])) # 显示第 k 类的结果return
# 关注 Youcans分享原创系列 https://blog.csdn.net/youcans
if __name__ __main__:main()
5.3 程序运行结果 地区 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10
0 北京 5.96 310 461 1557 931 319 44.36 2615 2.20 13631
1 上海 3.39 234 308 1035 498 161 35.02 3052 0.90 12665
2 天津 2.35 157 229 713 295 109 38.40 3031 0.86 9385
3 陕西 1.35 81 111 364 150 58 30.45 2699 1.22 7881
4 辽宁 1.50 88 128 421 144 58 34.30 2808 0.54 7733
Shape of cluster data: (30, 10)
Cluster centers:[[ 1.52987871 2.10479182 1.97836141 1.92037518 1.54974999 1.503441821.13526879 1.13595799 0.83939748 1.38149832][-0.32558635 -0.28230636 -0.28071191 -0.27988803 -0.28228409 -0.284940740.01965142 0.09458383 -0.26439737 -0.31101153][ 4.44318512 3.9725159 4.16079449 4.20994153 4.61768098 4.652966992.45321197 0.4021476 4.22779099 2.44672575][ 0.31835808 -0.56222029 -0.54985976 -0.52674552 -0.33003935 -0.26816609-2.60751756 -2.51932966 0.35167418 1.28278289]]
Cluster results:[2 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 1 1 1 1 3]聚类分析结果(分为4类):
第 0 类[上海, 天津]
第 1 类[陕西, 辽宁, 吉林, 黑龙江, 湖北, 江苏, 广东, 四川, 山东, 甘肃, 湖南, 浙江, 新疆, 福建, 山西, 河北, 安徽, 云南, 江西, 海南, 内蒙古, 河南, 广西, 宁夏, 贵州]
第 2 类[北京]
第 3 类[西藏, 青海]版权说明
本文中案例问题来自司守奎、孙兆亮数学建模算法与应用第2版国防工业出版社。 本文内容及例程为作者原创并非转载书籍或网络内容。
YouCans 原创作品 Copyright 2021 YouCans, XUPT Crated2021-05-09
欢迎关注 Youcans 原创系列每周更新数模笔记
Python数模笔记-PuLP库1线性规划入门 Python数模笔记-PuLP库2线性规划进阶 Python数模笔记-PuLP库3线性规划实例 Python数模笔记-StatsModels 统计回归1简介 Python数模笔记-StatsModels 统计回归2线性回归 Python数模笔记-StatsModels 统计回归3模型数据的准备 Python数模笔记-StatsModels 统计回归4可视化 Python数模笔记-Sklearn 1介绍 Python数模笔记-Sklearn 2聚类分析 Python数模笔记-Sklearn 3主成分分析 Python数模笔记-Sklearn 4线性回归 Python数模笔记-Sklearn 5支持向量机 Python数模笔记-模拟退火算法1多变量函数优化 Python数模笔记-模拟退火算法2约束条件的处理 Python数模笔记-模拟退火算法3整数规划问题 Python数模笔记-模拟退火算法4旅行商问题