重庆网站备案规则,素质课网站设计与建设,wordpress侧边栏加图片,域名访问网站文章目录 sklearn基础教程#xff1a;从入门到精通一、sklearn简介二、安装与配置三、数据预处理数据导入数据清洗特征选择数据标准化与归一化 四、常用模型介绍与应用线性回归逻辑回归决策树支持向量机K近邻算法随机森林集成学习 五、模型评估与调优交叉验证网格搜索模型评估… 文章目录 sklearn基础教程从入门到精通一、sklearn简介二、安装与配置三、数据预处理数据导入数据清洗特征选择数据标准化与归一化 四、常用模型介绍与应用线性回归逻辑回归决策树支持向量机K近邻算法随机森林集成学习 五、模型评估与调优交叉验证网格搜索模型评估指标 六、实战案例波士顿房价预测手写数字识别客户流失预测 七、测试接口与详细解释单元测试接口测试 八、总结 个人博客【 洛秋小站】洛秋资源小站【洛秋资源小站】 sklearn基础教程从入门到精通
Scikit-learn简称sklearn是Python中一个强大且易于使用的机器学习库。它提供了丰富的工具集包括数据预处理、特征选择、模型训练、评估和预测。本文将带领读者从零开始详细讲解sklearn的基本用法并通过多个实例帮助读者掌握如何在实际项目中应用这款工具。
一、sklearn简介
Scikit-learn是一个开源的机器学习库基于NumPy、SciPy和matplotlib构建。它为机器学习提供了简单而高效的工具并且具有以下特点
丰富的算法支持包含了回归、分类、聚类、降维等多种机器学习算法。易用性提供了简洁的API接口便于快速上手和使用。良好的文档支持详细的文档和大量的示例代码便于学习和参考。
二、安装与配置
安装scikit-learn非常简单只需使用pip命令即可。
pip install scikit-learn安装完成后可以通过以下命令检查安装是否成功
import sklearn
print(sklearn.__version__)三、数据预处理
数据预处理是机器学习的第一步也是非常关键的一步。良好的数据预处理可以显著提高模型的性能。下面我们将介绍数据预处理的几项重要操作。
数据导入
首先我们需要导入数据。sklearn提供了一些内置的数据集方便我们进行学习和测试。以下示例展示了如何加载波士顿房价数据集。
from sklearn.datasets import load_boston
import pandas as pd# 加载数据集
boston load_boston()
data pd.DataFrame(boston.data, columnsboston.feature_names)
data[PRICE] boston.target# 查看数据集前几行
print(data.head())数据清洗
数据清洗包括处理缺失值、重复值和异常值。
# 检查缺失值
print(data.isnull().sum())# 删除含有缺失值的行
data data.dropna()# 检查重复值
print(data.duplicated().sum())# 删除重复值
data data.drop_duplicates()特征选择
特征选择是通过选择最有用的特征来提高模型的性能和可解释性。
from sklearn.feature_selection import SelectKBest, f_regression# 选择最有用的5个特征
selector SelectKBest(f_regression, k5)
X_new selector.fit_transform(data.drop(PRICE, axis1), data[PRICE])# 查看选择的特征
print(X_new[:5])数据标准化与归一化
数据标准化和归一化是为了将数据缩放到相同的尺度上从而提高模型的训练效果。
from sklearn.preprocessing import StandardScaler, MinMaxScaler# 标准化
scaler StandardScaler()
data_scaled scaler.fit_transform(data.drop(PRICE, axis1))# 归一化
scaler MinMaxScaler()
data_normalized scaler.fit_transform(data.drop(PRICE, axis1))四、常用模型介绍与应用
线性回归
线性回归是一种最简单的回归模型用于预测连续型目标变量。
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error# 分割数据集
X_train, X_test, y_train, y_test train_test_split(data.drop(PRICE, axis1), data[PRICE], test_size0.2, random_state42)# 训练模型
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)逻辑回归
逻辑回归常用于分类问题尤其是二分类问题。
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score# 加载数据集以鸢尾花数据集为例
from sklearn.datasets import load_iris
iris load_iris()
X, y iris.data, iris.target# 分割数据集
X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state42)# 训练模型
model LogisticRegression()
model.fit(X_train, y_train)# 预测
y_pred model.predict(X_test)# 评估模型
accuracy accuracy_score(y_test, y_pred)
print(Accuracy:, accuracy)决策树
决策树是一种非参数的监督学习方法可以用于分类和回归。
from sklearn.tree import DecisionTreeClassifier# 训练模型
model DecisionTreeClassifier()
model.fit(X_train, y_train)# 预测
y_pred model.predict(X_test)# 评估模型
accuracy accuracy_score(y_test, y_pred)
print(Accuracy:, accuracy)支持向量机
支持向量机SVM是一种用于分类和回归的监督学习模型。
from sklearn.svm import SVC# 训练模型
model SVC()
model.fit(X_train, y_train)# 预测
y_pred model.predict(X_test)# 评估模型
accuracy accuracy_score(y_test, y_pred)
print(Accuracy:, accuracy)K近邻算法
K近邻算法KNN是一种简单的非参数分类和回归方法。
from sklearn.neighbors import KNeighborsClassifier# 训练模型
model KNeighborsClassifier(n_neighbors3)
model.fit(X_train, y_train)# 预测
y_pred model.predict(X_test)# 评估模型
accuracy accuracy_score(y_test, y_pred)
print(Accuracy:, accuracy)随机森林
随机森林是一种集成学习方法通过构建多个决策树来提高模型的准确性和稳定性。
from sklearn.ensemble import RandomForestClassifier# 训练模型
model RandomForestClassifier(n_estimators100)
model.fit(X_train, y_train)# 预测
y_pred model.predict(X_test)# 评估模型
accuracy accuracy_score(y_test, y_pred)
print(Accuracy:, accuracy)集成学习
集成学习通过组合多个模型来提高预测性能。常见的集成学习方法包括Bagging、Boosting和Stacking。
from sklearn.ensemble import GradientBoostingClassifier# 训练模型
model GradientBoostingClassifier(n_estimators100)
model.fit(X_train, y_train)# 预测
y_pred model.predict(X_test)# 评估模型
accuracy accuracy_score(y_test, y_pred)
print(Accuracy:, accuracy)五、模型评估与调优
交叉验证
交叉验证是一种评估模型性能的方法通过多次分割数据集来获取模型的稳定性和泛化能力。
from sklearn.model_selection import cross_val_score# 使用交叉验证评估模型
scores cross_val_score(model, X, y, cv5)
print(Cross-Validation Scores:, scores)
print(Mean Score:, scores.mean())网格搜索
网格搜索是一种超参数调优方法通过遍历所有可能的参数组合来找到最佳参数。
from sklearn.model_selection import GridSearchCV# 定义参数网格
param_grid {n_estimators: [50, 100, 200],max_depth: [None, 10, 20, 30]
}# 进行网格搜索
grid_search GridSearchCV(RandomForestClassifier(), param_grid, cv5)
grid_search.fit(X_train, y_train)# 输出最佳参数
print(Best Parameters:, grid_search.best_params_)模型评估指标
常见的模型评估指标包括准确率、精确率、召回率、F1分数等。
from sklearn.metrics import precision_score, recall_score, f1_score# 计算精确率
precision precision_score(y_test, y_pred, averagemacro)
print(Precision:, precision)# 计算召回率
recall recall_score(y_test, y_pred, averagemacro)
print(Recall:, recall)# 计算F1分数
f1 f1_score(y_test, y_pred, averagemacro)
print(F1 Score:, f1)六、实战案例
波士顿房价预测
以下示例展示了如何使用线性回归模型预测波士顿房价。
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error# 加载数据集
boston load_boston()
X, y boston.data, boston.target# 分割数据集
X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state42)# 训练模型
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)手写数字识别
以下示例展示了如何使用支持向量机模型进行手写数字识别。
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score# 加载数据集
digits load_digits()
X, y digits.data, digits.target# 分割数据集
X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state42)# 训练模型
model SVC()
model.fit(X_train, y_train)# 预测
y_pred model.predict(X_test)# 评估模型
accuracy accuracy_score(y_test, y_pred)
print(Accuracy:, accuracy)客户流失预测
以下示例展示了如何使用随机森林模型预测客户流失。
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score# 加载数据集
data pd.read_csv(customer_churn.csv)
X data.drop(Churn, axis1)
y data[Churn]# 分割数据集
X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state42)# 训练模型
model RandomForestClassifier(n_estimators100)
model.fit(X_train, y_train)# 预测
y_pred model.predict(X_test)# 评估模型
accuracy accuracy_score(y_test, y_pred)
print(Accuracy:, accuracy)七、测试接口与详细解释
在实际开发中测试是保证代码质量和模型性能的重要环节。sklearn中没有直接的测试模块但我们可以使用Python的unittest库来进行模型和接口的测试。
单元测试
以下示例展示了如何使用unittest进行模型的单元测试。
import unittest
from sklearn.linear_model import LinearRegressionclass TestLinearRegression(unittest.TestCase):def setUp(self):self.model LinearRegression()self.X_train [[1, 2], [2, 3], [3, 4], [4, 5]]self.y_train [2, 3, 4, 5]def test_fit(self):self.model.fit(self.X_train, self.y_train)self.assertTrue(hasattr(self.model, coef_), Model should have coefficients after fitting)def test_predict(self):self.model.fit(self.X_train, self.y_train)y_pred self.model.predict([[5, 6]])self.assertEqual(len(y_pred), 1, Prediction should return one value)if __name__ __main__:unittest.main()接口测试
接口测试用于确保系统各部分之间的交互正常。以下示例展示了如何使用unittest进行简单的接口测试。
import unittest
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegressionclass TestLogisticRegressionAPI(unittest.TestCase):def setUp(self):self.data load_iris()self.X, self.y self.data.data, self.data.targetself.model LogisticRegression()self.model.fit(self.X, self.y)def test_predict(self):y_pred self.model.predict(self.X)self.assertEqual(len(y_pred), len(self.y), Prediction length should match input length)def test_predict_proba(self):proba self.model.predict_proba(self.X)self.assertEqual(proba.shape, (len(self.y), 3), Probability prediction should return correct shape)if __name__ __main__:unittest.main()八、总结
我们探讨了sklearn的基础知识和常用操作。sklearn以其丰富的功能和简洁的API广泛应用于机器学习领域。从数据预处理、模型训练到模型评估sklearn提供了一站式的解决方案。 最后愿大家都可以解决工作中和生活中遇到的难题剑锋所指,所向披靡