来源:投稿 作者:恒心 编辑:学姐
机器学习是人工智能的一个重要分支,它让计算机通过数据学习并进行预测。对于初学者来说,了解常用的机器学习算法及其实现方式是非常重要的。本篇文章将总结几种常见的机器学习算法,并提供相应的Python代码示例和详细的解释,希望能帮助小白更好地理解这些算法。
unset unset 1. 线性回归unset unset 线性回归是一种用于预测数值型结果的算法。其基本思想是通过拟合一条直线来描述自变量与因变量之间的关系。如果我们有一组数据点,我们希望通过这些数据点来找到最优的线性方程。
数学模型 线性回归的数学模型为:
img 其中:
Python 实现 下面是使用 scikit-learn
库实现线性回归的示例代码:
pythonCopy Codeimport numpy as np import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression# 生成样本数据 np.random.seed(0) x = 2.5 * np.random.rand(100) # 自变量 y = 1 + 2 * x + np.random.randn(100) # 因变量,加上一些随机噪声 # 划分训练集和测试集 x_train, x_test, y_train, y_test = train_test_split(x.reshape(-1, 1), y, test_size=0.2, random_state=42)# 创建线性回归模型 model = LinearRegression() model.fit(x_train, y_train) # 训练模型 # 进行预测 y_pred = model.predict(x_test)# 可视化 plt.scatter(x_test, y_test, color='blue' , label='真实值' ) plt.scatter(x_test, y_pred, color='red' , label='预测值' ) plt.xlabel('自变量 x' ) plt.ylabel('因变量 y' ) plt.title('线性回归' ) plt.legend() plt.show()
解释 生成样本数据 :我们生成了一些随机数据点,其中 yy 与 xx 存在一定的线性关系。划分数据集 :使用 train_test_split
将数据随机划分为训练集和测试集,80%的数据用于训练,20%用于测试。创建模型 :使用 LinearRegression()
创建线性回归模型,并使用训练数据进行训练。
进行预测 :用测试数据进行预测,并可视化真实值与预测值的关系。 unset unset 2. 逻辑回归unset unset 逻辑回归主要用于二分类问题。尽管名字中有“回归”,但它实际上是用于分类的。逻辑回归通过使用 Sigmoid 函数将输出映射到 (0, 1) 的范围内,从而得到概率值。
数学模型 逻辑回归的模型为:
img 其中 z=wx+bz =w**x +b ,pp 是事件发生的概率。
Python 实现 pythonCopy Codefrom sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score# 加载数据集 iris = load_iris() X = iris.data[:100, :2] # 选择前100个样本(两个类别) y = iris.target[:100] # 目标值 # 划分数据集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 创建逻辑回归模型 model = LogisticRegression() model.fit(X_train, y_train) # 训练模型 # 进行预测 y_pred = model.predict(X_test)# 计算准确率 accuracy = accuracy_score(y_test, y_pred)print (f'准确率: {accuracy:.2f}' )
解释 加载数据集 :我们使用鸢尾花数据集,其中只有前100个样本用于二分类(Setosa 和 Versicolour)。划分数据集 :同样使用 train_test_split
划分数据集。创建模型 :使用 LogisticRegression()
创建逻辑回归模型,并训练。unset
unset 3. 决策树unset unset 决策树是一种简单易懂的分类和回归方法。它通过逐步询问问题,将数据分成不同的类别。每个节点代表一个特征,每条边代表一个特征的取值,叶子节点代表最终的决策。
Python 实现 pythonCopy Codefrom sklearn.datasets import load_iris from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score, classification_report# 加载数据集 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, random_state=42)# 创建决策树模型 model = DecisionTreeClassifier() model.fit(X_train, y_train) # 训练模型 # 进行预测 y_pred = model.predict(X_test)# 计算准确率 accuracy = accuracy_score(y_test, y_pred)print (f'准确率: {accuracy:.2f}' )print (classification_report(y_test, y_pred))
解释 加载数据集 :使用鸢尾花数据集,包括三个类别的样本。创建模型 :使用 DecisionTreeClassifier()
创建决策树模型,并训练。进行预测 :对测试集进行预测,输出准确率和分类报告,以评估模型性能。
unset unset 4. K近邻算法(KNN)unset unset K近邻算法是一种基于实例的学习方法,用于分类和回归。KNN的基本思想是,对于一个待分类的样本,通过查看其最近的K个邻居的类别,来决定该样本的类别。
Python 实现 pythonCopy Codefrom sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier from sklearn.metrics import accuracy_score# 加载数据集 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, random_state=42)# 创建KNN模型,设定K=3 model = KNeighborsClassifier(n_neighbors=3) model.fit(X_train, y_train) # 训练模型 # 进行预测 y_pred = model.predict(X_test)# 计算准确率 accuracy = accuracy_score(y_test, y_pred)print (f'准确率: {accuracy:.2f}' )
解释 unset unset 5. 支持向量机(SVM)unset unset 支持向量机是一种强大的分类算法,它通过寻找最佳超平面来分割不同类别的数据。SVM在高维空间中表现良好,适用于线性和非线性分类问题。
Python 实现 pythonCopy Codefrom sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.svm import SVC from sklearn.metrics import accuracy_score# 加载数据集 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, random_state=42)# 创建SVM模型 model = SVC(kernel='linear' ) # 使用线性核
model.fit(X_train, y_train) # 训练模型 # 进行预测 y_pred = model.predict(X_test)# 计算准确率 accuracy = accuracy_score(y_test, y_pred)print (f'准确率: {accuracy:.2f}' )
解释 unset unset 6. 随机森林unset unset 随机森林是一种集成学习算法,由多个决策树组成。它通过结合多个树的预测结果来提高分类的准确性,并降低过拟合的风险。
Python 实现 pythonCopy Codefrom sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import accuracy_score# 加载数据集 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, random_state=42)# 创建随机森林模型 model = RandomForestClassifier(n_estimators=100) # 100棵树 model.fit(X_train, y_train) # 训练模型 # 进行预测 y_pred = model.predict(X_test)# 计算准确率 accuracy = accuracy_score(y_test, y_pred)print (f'准确率: {accuracy:.2f}' )
解释 创建模型 :创建一个有100棵树的随机森林模型并训练。unset unset
7. 梯度提升树(Gradient Boosting)unset unset 梯度提升树是一种集成学习算法,通过逐步构建树来优化模型。每一棵树都是在前一棵树的基础上建立的,重点关注之前模型中错误的样本。
Python 实现 pythonCopy Codefrom sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.ensemble import GradientBoostingClassifier from sklearn.metrics import accuracy_score# 加载数据集 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, random_state=42)# 创建梯度提升树模型 model = GradientBoostingClassifier(n_estimators=100) # 100棵树 model.fit(X_train, y_train) # 训练模型 # 进行预测 y_pred = model.predict(X_test)# 计算准确率 accuracy = accuracy_score(y_test, y_pred)print (f'准确率: {accuracy:.2f}' )
解释 创建模型 :创建一个有100棵树的梯度提升树模型并训练。unset
unset 8. 聚类算法(K均值)unset unset K均值聚类是一种无监督学习算法,旨在将数据分成K个簇。它通过迭代的方法将每个点分配到最近的簇中,并更新簇的中心位置。
Python 实现 pythonCopy Codefrom sklearn.datasets import load_iris from sklearn.cluster import KMeans import matplotlib.pyplot as plt# 加载数据集 iris = load_iris() X = iris.data# 创建K均值模型,设定K=3 model = KMeans(n_clusters=3, random_state=42) model.fit(X) # 训练模型 # 预测簇标签 labels = model.labels_# 可视化前两个特征 plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='rainbow' ) plt.xlabel('特征 1' ) plt.ylabel('特征 2' ) plt.title('K均值聚类' ) plt.show()
解释 进行预测 :获取每个样本的簇标签,并可视化前两个特征的聚类结果。
本文总结了多种常用的机器学习算法,包括线性回归、逻辑回归、决策树、K近邻、支持向量机、随机森林、梯度提升树和K均值聚类。通过简单的Python代码示例,我们展示了如何使用scikit-learn
库实现这些算法。希望这篇文章能够帮助初学者理解机器学习的基本概念和算法,为进一步学习打下坚实的基础。