网站首页资讯科技

运用Python进行无监督学习

2019-01-11 05:04:38小编:仁怀安卓网点击数:

监督学习是一种用于在数据中查找形式的机器学习技能。无监督算法给出的数据不带符号,只给出输入变量(X),没有相应的输出变量。在无监督学习中,算法自己去发现数据中风趣的结构。

人工智能研讨总监严乐群解说说,监督学习教育机器能够自主学习,而不需求被清晰奉告它们所做的一切是对是错,这是完结真实人工智能的要害。

监督与无监督学习

监督学习中,体系企图从前面给出的比如中学习。(另一方面,在无监督学习中,体系企图直接从给出的比如中找到形式。)假如数据集被符号,它就会遇到监督问题,假如数据集没有符号,那么它就是一个监督问题。

SRC

左面的图画是监督学习的一个比如;咱们运用回归技能来寻觅特征之间的最佳匹配线。而在无监督学习中,输入是依据特征别离的,猜测是依据它所属的集群。

重要术语

特性:用于猜测的输入变量。

猜测:当供给一个输入示例时,模型s的输出。

示例:数据集的一行。示例包括一个或多个特性,或许还有一个标签。

标签:特性的成果。

为无监督学习预备数据

在本文中,咱们运用Iris数据集进行第一次猜测。该数据集包括一组150条记载,包括5个特点:花瓣长度、花瓣宽度、萼片长度、萼片宽度和类别。蝴蝶花,蝴蝶花和花样蝴蝶花是三个等级。关于咱们的无监督算法,咱们给出虹膜花的这四个特征,并猜测它归于哪一类。

咱们运用Python中的sklearn库加载Iris数据集,运用matplotlib完结数据可视化。下面是用于研讨数据集的代码片段。

# Importing Modules from sklearn import datasets import matplotlib.pyplot as plt 
# Loading dataset iris_df = datasets.load_iris() 
# Available methods on dataset print(dir(iris_df)) 
# Features print(iris_df.feature_names) 
# Targets print(iris_df.target) 
# Target Names print(iris_df.target_names) label = {0: 'red', 1: 'blue', 2: 'green'} 
# Dataset Slicing x_axis = iris_df.data[:, 0]  # Sepal Length y_axis = iris_df.data[:, 2]  # Sepal Width 
# Plotting plt.scatter(x_axis, y_axis, c=iris_df.target) plt.show()
['DESCR','data','feature_names','target','target_names'] 
['sepal length(cm)','sepal width(cm)','petal length(cm)','petal width(厘米)']
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2]
['setosa''versicolor''virginica']

紫罗兰:濑户草,绿色:杂色,黄色:弗吉尼亚

在上面的图画中,左面的图画是未分类的原始数据,右边的图画是聚类的(依据数据的特征进行分类)。当给定一个要猜测的输入时,它会依据它的特性查看它所属的集群,然后进行猜测。

Python中的K-Means聚类

K均值是一种迭代聚类算法,其方针是在每次迭代中寻觅部分最大值。挑选初始所需的集群数量。因为咱们知道有3个类,所以咱们编写算法将数据分组到3个类中,办法是将参数n个集群传递到KMeans模型中。现在随机将三个点(输入)分配到三个集群中。依据每个点之间的质心间隔,下一个给定的输入被别离成受尊重的集群。现在,从头核算一切集群的质心。

集群的每个质心是界说成果组的特征值的调集。质心特征权值的查验能够定性地解说每个聚类所代表的组的类型。

从sklearn库中导入KMeans模型,进行特征拟合和猜测。

K是Python中的完结。

# Importing Modules from sklearn import datasets from sklearn.cluster import KMeans 
# Loading dataset iris_df = datasets.load_iris() 
# Declaring Model model = KMeans(n_clusters=3) 
# Fitting Model model.fit(iris_df.data) 
# Predicitng a single input predicted_label = model.predict([[7.2, 3.5, 0.8, 1.6]]) 
# Prediction on the entire data all_predictions = model.predict(iris_df.data) 
# Printing Predictions print(predicted_label) print(all_predictions)
[0] 
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 1 1 1 2 1 1 1 1 1 2 2 1 1 1 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2]

分层聚类

分层聚类,望文生义,是一种构建集群层次结构的算法。该算法首先将一切数据分配给自己的集群。然后将两个最近的集群连接到同一个集群中。最终,当只剩下一个集群时,该算法就完毕了。

运用树状图能够显现层次聚类的完结状况。现在让咱们看一个谷物数据分层聚类的比如。数据集能够在这儿找到。

Python中的分层集群完结。

# Importing Modules from scipy.cluster.hierarchy import linkage, dendrogram import matplotlib.pyplot as plt import pandas as pd 
# Reading the DataFrame seeds_df = pd.read_csv(    "https://raw.githubusercontent.com/vihar/unsupervised-learning-with-python/master/seeds-less-rows.csv") 
# Remove the grain species from the DataFrame, save for later varieties = list(seeds_df.pop('grain_variety')) 
# Extract the measurements as a NumPy array samples = seeds_df.values 
""" Perform hierarchical clustering on samples using the linkage() function with the method='complete' keyword argument. Assign the result to mergings. """ mergings = linkage(samples, method='complete') 
""" Plot a dendrogram using the dendrogram() function on mergings, specifying the keyword arguments labels=varieties, leaf_rotation=90, and leaf_font_size=6. """ dendrogram(mergings,           labels=varieties,           leaf_rotation=90,           leaf_font_size=6,           ) 
plt.show()

K均值和分层聚类之间的差异

  • 层次聚类不能很好地处理大数据,K表明聚类能够。这是因为K均值的时刻复杂度是线性的,即O(n),而层次聚类时刻复杂度是二次的,即O(n2)。

  • 在K均值聚类中,当咱们从恣意挑选的聚类开始时,屡次运转该算法生成的成果或许会有所不同。而成果在层次聚类中是可重复的。

  • 当星系团的形状是超球形(如二维的圆形,三维的球形)时,发现K 代表作业杰出。

  • K-Means不允许有噪声的数据,而在分层中咱们能够直接运用有噪声的数据集进行聚类

    t-SNE聚类

它是一种无监督的可视化学习办法。t-SNE代表t散布随机街坊嵌入。它将高维空间映射到能够可视化的二维或三维空间。具体地说,它经过一个二维或三维点对每个高维物体进行建模,其办法是用邻近的点对类似的物体建模,用高概率的远点对不同的物体建模。

Python中Iris数据集的t-SNE聚类完结。

# Importing Modules from sklearn import datasets from sklearn.manifold import TSNE import matplotlib.pyplot as plt 
# Loading dataset iris_df = datasets.load_iris() 
# Defining Model model = TSNE(learning_rate=100) 
# Fitting Model transformed = model.fit_transform(iris_df.data) 
# Plotting 2d t-Sne x_axis = transformed[:, 0] y_axis = transformed[:, 1] 
plt.scatter(x_axis, y_axis, c=iris_df.target) plt.show()

紫色:Setosa,绿色:Versicolor,黄色:Virginica

这儿,因为Iris数据集具有四个特征(4d),将其转换成二维图表明。类似地,t-SNE模型能够使用于具有n个特征的数据集。

DBSCAN群集

DBSCAN(依据密度的噪声使用空间聚类)是一种常用的聚类算法,用于代替猜测剖析中的k均值。它不需求您输入集群的数量才干运转。但作为交流,您有必要调优其他两个参数

scikit-learn完结为eps和min示例参数供给了默认值,可是一般需求对它们进行调优。eps参数是在同一个邻域内需求考虑的两个数据点之间的最大间隔。最小样本参数是一个邻域内被认为是一个集群的数据点的最小数量。

DBSCAN在Python中的聚类

# Importing Modules from sklearn.datasets import load_iris import matplotlib.pyplot as plt from sklearn.cluster import DBSCAN from sklearn.decomposition import PCA 
# Load Dataset iris = load_iris() 
# Declaring Model dbscan = DBSCAN() 
# Fitting dbscan.fit(iris.data) 
# Transoring Using PCA pca = PCA(n_components=2).fit(iris.data) pca_2d = pca.transform(iris.data) 
# Plot based on Class for i in range(0, pca_2d.shape[0]):    if dbscan.labels_[i] == 0:        c1 = plt.scatter(pca_2d[i, 0], pca_2d[i, 1], c='r', marker='+')    elif dbscan.labels_[i] == 1:        c2 = plt.scatter(pca_2d[i, 0], pca_2d[i, 1], c='g', marker='o')    elif dbscan.labels_[i] == -1:        c3 = plt.scatter(pca_2d[i, 0], pca_2d[i, 1], c='b', marker='*') 
plt.legend([c1, c2, c3], ['Cluster 1', 'Cluster 2', 'Noise']) plt.title('DBSCAN finds 2 clusters and Noise') plt.show()

更多无监督技能:

  • 主成分剖析(PCA)

  • 反常检测

  • 自动编码

  • 深崇奉网

  • Hebbian学习

  • 生成对立网络(GAN)

  • 自组织地图

贪心科技贪心科技

贪心科技是国内首家AI和大数据课程为主的自适应学习渠道。咱们寻求最精粹的AI教育内容和个人量身定制的讲堂。咱们鼓舞我们具有“贪心精力”:对常识不断的巴望,对现状不满期望前进的希望。贪心科技,满意贪心的你。