在机器学习领域,分类算法是基础且重要的部分。scikit-learn是一个强大的Python库,提供了多种分类算法,从简单的逻辑回归到复杂的随机森林。本文将带领新手一步步了解scikit-learn中常用分类算法的原理,帮助大家从入门到精通。
1. 线性回归与逻辑回归
线性回归是预测连续值的算法,而逻辑回归是预测离散值的算法,通常用于二分类问题。两者都是基于线性模型的。
1.1 线性回归
线性回归假设数据之间存在线性关系,通过最小化误差平方和来找到最佳拟合线。
公式: [ y = ax + b ]
其中,( y ) 是预测值,( x ) 是特征值,( a ) 是斜率,( b ) 是截距。
代码示例:
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
# 假设数据
X = [[1], [2], [3], [4], [5]]
y = [2, 4, 5, 4, 5]
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# 创建线性回归模型
model = LinearRegression()
# 训练模型
model.fit(X_train, y_train)
# 预测测试集
y_pred = model.predict(X_test)
# 评估模型
mse = mean_squared_error(y_test, y_pred)
print("Mean Squared Error:", mse)
1.2 逻辑回归
逻辑回归用于预测二分类问题,其目标函数是最大化似然函数。
公式:
[ P(y|x) = \frac{1}{1 + e^{-(ax + b)}} ]
其中,( P(y|x) ) 是给定特征 ( x ) 下,标签 ( y ) 为 1 的概率。
代码示例:
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
# 假设数据
X = [[1], [2], [3], [4], [5]]
y = [0, 1, 0, 1, 1]
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# 创建逻辑回归模型
model = LogisticRegression()
# 训练模型
model.fit(X_train, y_train)
# 预测测试集
y_pred = model.predict(X_test)
# 评估模型
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
2. 决策树与随机森林
决策树是一种基于树结构的分类算法,通过递归地将数据集分割成越来越小的子集,直到满足停止条件。
2.1 决策树
代码示例:
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import classification_report
# 假设数据
X = [[1], [2], [3], [4], [5]]
y = [0, 1, 0, 1, 1]
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# 创建决策树模型
model = DecisionTreeClassifier()
# 训练模型
model.fit(X_train, y_train)
# 预测测试集
y_pred = model.predict(X_test)
# 评估模型
print(classification_report(y_test, y_pred))
2.2 随机森林
随机森林是一种集成学习方法,通过构建多个决策树,并对预测结果进行投票来提高准确率。
代码示例:
from sklearn.ensemble import RandomForestClassifier
# 创建随机森林模型
model = RandomForestClassifier(n_estimators=10)
# 训练模型
model.fit(X_train, y_train)
# 预测测试集
y_pred = model.predict(X_test)
# 评估模型
print(classification_report(y_test, y_pred))
3. 支持向量机(SVM)
支持向量机是一种基于间隔最大化原理的分类算法,通过找到一个最佳的超平面来分隔数据。
代码示例:
from sklearn.svm import SVC
# 创建SVM模型
model = SVC()
# 训练模型
model.fit(X_train, y_train)
# 预测测试集
y_pred = model.predict(X_test)
# 评估模型
print(classification_report(y_test, y_pred))
4. K最近邻(KNN)
K最近邻是一种基于距离的算法,通过计算待分类数据与训练集中每个数据点的距离,选择距离最近的 ( k ) 个邻居,并预测其标签。
代码示例:
from sklearn.neighbors import KNeighborsClassifier
# 创建KNN模型
model = KNeighborsClassifier(n_neighbors=3)
# 训练模型
model.fit(X_train, y_train)
# 预测测试集
y_pred = model.predict(X_test)
# 评估模型
print(classification_report(y_test, y_pred))
总结
本文介绍了scikit-learn中常用的分类算法原理,包括线性回归、逻辑回归、决策树、随机森林、支持向量机和K最近邻。通过了解这些算法的原理,可以帮助新手更好地理解和应用它们。希望本文对您有所帮助!
