监督学习和无监督学习是机器学习中两种常见的学习方式,它们的区别在于是否有标签数据。以下是它们的定义和代码举例。
监督学习是一种机器学习的方式,其训练数据集包括标签数据(也称为有监督数据)。这些标签数据告诉了机器学习算法输入数据与输出结果之间的对应关系。监督学习可以用于分类和回归问题,其中分类问题是对输入数据进行分类,回归问题是对输入数据进行连续值的预测。
以下是一个基于监督学习的代码示例,使用Scikit-learn库中的逻辑回归算法来对鸢尾花进行分类。在这个示例中,我们将训练数据分成了输入数据和输出数据。
fromsklearn.datasetsimportload_irisfromsklearn.linear_modelimportLogisticRegressionfromsklearn.model_selectionimporttrain_test_split#加载鸢尾花数据集iris=load_iris()X=iris.data#输入数据y=iris.target#输出数据#将数据集分成训练集和测试集X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2)#训练逻辑回归模型clf=LogisticRegression()clf.fit(X_train,y_train)#在测试集上进行预测y_pred=clf.predict(X_test)#计算准确率accuracy=clf.score(X_test,y_test)print(f"Accuracy:{accuracy}")无监督学习无监督学习是一种机器学习的方式,其训练数据集不包含标签数据。这意味着算法必须从数据中自己发现模式和结构。无监督学习可以用于聚类、降维和异常检测等问题。
以下是一个基于无监督学习的代码示例,使用Scikit-learn库中的K-Means算法对鸢尾花数据进行聚类。在这个示例中,我们只使用输入数据。
·加载数据集:首先使用Scikit-learn库中的load_iris()函数加载鸢尾花数据集。这个数据集包括150个样本和4个特征(花瓣和萼片的长度和宽度)。
·定义输入数据:我们将加载的数据集的特征存储在变量X中。
·使用K-Means算法:我们使用Scikit-learn库中的KMeans类来训练K-Means模型。在这个例子中,我们设置n_clusters参数为3,因为我们知道这个数据集有3个不同的鸢尾花品种。在实际使用中,可能需要通过一些技术手段来确定最佳的聚类数量。
·获取聚类结果:K-Means算法将每个样本分配到最接近的簇中,并将其标记为0、1或2。我们可以通过访问kmeans.labels_属性来获得这些标签。
·打印聚类结果:最后,我们打印出聚类结果,以便查看哪些样本被分配到了哪些簇中。
总之,监督学习和无监督学习的区别在于是否有标签数据。监督学习用于分类和回归问题,而无监督学习用于聚类、降维和异常检测等问题。在实际应用中,我们需要根据问题的性质来选择合适的学习方式。