机器学习是人工智能的一个分支,通过从数据中学习模型来进行预测或决策。本文将介绍几种常见的机器学习算法,包括线性回归、逻辑回归、决策树、支持向量机和K最近邻,并提供每种算法的Python代码示例。
1. 线性回归(Linear Regression)
线性回归是一种用于建模变量之间线性关系的回归分析方法。其目的是找到最优的线性方程来预测因变量的值。
实现过程:
- 选择一组特征和目标变量。
- 通过最小化均方误差(MSE)来拟合线性模型。
- 使用拟合的模型进行预测。
Python代码:
python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
# 生成示例数据
X = np.array([1, 2, 3, 4, 5]).reshape(-1, 1)
y = np.array([1, 3, 2, 3, 5])
# 创建线性回归模型并拟合数据
model = LinearRegression()
model.fit(X, y)
# 进行预测
y_pred = model.predict(X)
# 绘制数据点和拟合线
plt.scatter(X, y, color='blue')
plt.plot(X, y_pred, color='red')
plt.title('Linear Regression')
plt.xlabel('X')
plt.ylabel('y')
plt.show()
2. 逻辑回归(Logistic Regression)
逻辑回归是一种用于分类问题的回归分析方法。它通过使用逻辑函数将线性回归的输出映射到[0, 1]之间,从而进行分类。
实现过程:
- 选择一组特征和目标变量。
- 使用逻辑函数拟合线性模型。
- 通过最大化似然函数来估计模型参数。
- 使用拟合的模型进行分类预测。
Python代码:
python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
# 生成示例数据
X = np.array([[1], [2], [3], [4], [5]])
y = np.array([0, 0, 0, 1, 1])
# 创建逻辑回归模型并拟合数据
model = LogisticRegression()
model.fit(X, y)
# 进行预测
y_pred = model.predict(X)
# 绘制数据点和决策边界
plt.scatter(X, y, color='blue')
plt.plot(X, model.predict_proba(X)[:, 1], color='red')
plt.title('Logistic Regression')
plt.xlabel('X')
plt.ylabel('Probability')
plt.show()
3. 决策树(Decision Tree)
决策树是一种树状结构的监督学习算法。它通过对特征进行条件判断,将数据逐步划分成多个子集,从而进行分类或回归。
实现过程:
- 选择一个特征进行划分,最大化信息增益或基尼指数。
- 对每个子集递归地应用决策树算法。
- 直到满足停止条件(如达到最大深度或子集纯度)为止。
Python代码:
python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.tree import DecisionTreeClassifier
from sklearn import tree
# 生成示例数据
X = np.array([[1, 2], [2, 3], [3, 4], [4, 5], [5, 6]])
y = np.array([0, 0, 1, 1, 1])
# 创建决策树模型并拟合数据
model = DecisionTreeClassifier()
model.fit(X, y)
# 可视化决策树
plt.figure(figsize=(10, 6))
tree.plot_tree(model, filled=True)
plt.title('Decision Tree')
plt.show()
4. 支持向量机(Support Vector Machine, SVM)
支持向量机是一种用于分类和回归的监督学习算法。它通过找到一个最佳的超平面来最大化不同类别之间的间隔,从而进行分类。
实现过程:
- 选择一组特征和目标变量。
- 使用优化算法找到最大化间隔的超平面。
- 通过超平面将数据点分为不同类别。
Python代码:
python
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.svm import SVC
# 生成示例数据
X, y = datasets.make_blobs(n_samples=100, centers=2, random_state=6)
# 创建支持向量机模型并拟合数据
model = SVC(kernel='linear')
model.fit(X, y)
# 绘制数据点和决策边界
plt.scatter(X[:, 0], X[:, 1], c=y, s=30, cmap=plt.cm.Paired)
# 获取超平面
ax = plt.gca()
xlim = ax.get_xlim()
ylim = ax.get_ylim()
xx = np.linspace(xlim[0], xlim[1], 30)
yy = np.linspace(ylim[0], ylim[1], 30)
YY, XX = np.meshgrid(yy, xx)
xy = np.vstack([XX.ravel(), YY.ravel()]).T
Z = model.decision_function(xy).reshape(XX.shape)
ax.contour(XX, YY, Z, colors='k', levels=[-1, 0, 1], alpha=0.5, linestyles=['--', '-', '--'])
plt.title('Support Vector Machine')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()
5. K最近邻(K-Nearest Neighbors, KNN)
K最近邻是一种用于分类和回归的非参数监督学习算法。它通过计算待分类样本与训练样本集中所有样本的距离,选择距离最近的k个样本,进行分类或回归。
实现过程:
- 选择参数k和距离度量方法。
- 计算待分类样本与训练样本集所有样本的距离。
- 选择距离最近的k个样本,进行投票或平均,得到预测结果。
Python代码:
python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier
# 生成示例数据
X = np.array([[1, 2], [2, 3], [3, 4], [4, 5], [5, 6]])
y = np.array([0, 0, 1, 1, 1])
# 创建KNN模型并拟合数据
model = KNeighborsClassifier(n_neighbors=3)
model.fit(X, y)
# 进行预测
X_test = np.array([[2, 2], [3, 5]])
y_pred = model.predict(X_test)
# 绘制数据点和预测结果
plt.scatter(X[:, 0], X[:, 1], c=y, s=30, cmap=plt.cm.Paired)
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_pred, s=100, marker='*', cmap=plt.cm.Paired)
plt.title('K-Nearest Neighbors')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()