线性回归是预测连续变量的一种简单而有效的方法。其数学模型假设因变量 y 与自变量 x 之间存在线性关系,用公式表示为:
Python代码实现
import numpy as np
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
# 创建数据
X = np.array([[1], [2], [3], [4], [5]])
y = np.array([1, 2, 1.3, 3.75, 2.25])
# 创建模型并训练
model = LinearRegression()
model.fit(X, y)
# 预测
predicted = model.predict(X)
# 可视化
plt.scatter(X, y, color='black')
plt.plot(X, predicted, color='blue', linewidth=2)
plt.xlabel("X")
plt.ylabel("y")
plt.title("Linear Regression")
plt.show()
逻辑回归用于分类问题,其目标是预测数据点属于某一类的概率。模型输出值在 000 到 111 之间。公式为:
Python代码实现
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
import numpy as np
# 加载数据集
data = load_iris()
X = data.data[:100, :2] # 只取两个特征方便可视化
y = data.target[:100]
# 创建模型并训练
model = LogisticRegression()
model.fit(X, y)
# 可视化决策边界
x_min, x_max = X[:, 0].min() - .5, X[:, 0].max() + .5
y_min, y_max = X[:, 1].min() - .5, X[:, 1].max() + .5
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),
np.arange(y_min, y_max, 0.02))
Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, cmap=plt.cm.Paired, alpha=0.8)
plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', marker='o')
plt.xlabel("Feature 1")
plt.ylabel("Feature 2")
plt.title("Logistic Regression Decision Boundary")
plt.show()
KNN是一个简单的分类算法,其核心思想是通过找出距离最近的K个邻居来判断类别。适用于非线性分类问题,但当数据量较大时计算量会增大。
Python代码实现
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
import numpy as np
# 加载数据集
data = load_iris()
X = data.data[:, :2]
y = data.target
# 创建模型并训练
model = KNeighborsClassifier(n_neighbors=5)
model.fit(X, y)
# 可视化决策边界
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),
np.arange(y_min, y_max, 0.02))
Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, alpha=0.8)
plt.scatter(X[:, 0], X[:, 1], c=y, edgecolor='k')
plt.xlabel("Feature 1")
plt.ylabel("Feature 2")
plt.title("K-Nearest Neighbors Decision Boundary")
plt.show()
支持向量机通过找到一个超平面将数据分开,以最大化边界的间隔。适用于线性或非线性分类问题,依赖于合适的核函数。
Python代码实现
from sklearn.svm import SVC
from sklearn.datasets import load_iris
import numpy as np
import matplotlib.pyplot as plt
# 加载数据集
data = load_iris()
X = data.data[:, :2] # 取前两个特征
y = data.target
# 创建模型并训练
model = SVC(kernel='linear')
model.fit(X, y)
# 可视化决策边界
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),
np.arange(y_min, y_max, 0.02))
Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, alpha=0.8)
plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k')
plt.xlabel("Feature 1")
plt.ylabel("Feature 2")
plt.title("Support Vector Machine Decision Boundary")
plt.show()
决策树通过递归地将数据划分成多个子集来进行分类。其关键在于选择特征并确定划分点,直到每个节点满足条件或达到最大深度。
Python代码实现
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
import numpy as np
# 加载数据集
data = load_iris()
X = data.data[:, :2]
y = data.target
# 创建模型并训练
model = DecisionTreeClassifier(max_depth=3)
model.fit(X, y)
# 可视化决策边界
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),
np.arange(y_min, y_max, 0.02))
Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, alpha=0.8)
plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k')
plt.xlabel("Feature 1")
plt.ylabel("Feature 2")
plt.title("Decision Tree Decision Boundary")
plt.show()
随机森林通过组合多个决策树来增强分类性能。每棵树独立训练,最终分类结果取投票的结果。
Python代码实现
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
import numpy as np
import matplotlib.pyplot as plt
# 加载数据集
data = load_iris()
X = data.data[:, :2]
y = data.target
# 创建模型并训练
model = RandomForestClassifier(n_estimators=100, max_depth=3, random_state=0)
model.fit(X, y)
# 可视化决策边界
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max
我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=2oul0hvapjsws