Python机器学习工具scikit-learn的使用笔记
在本文中,我们将学习Python中常用的机器学习工具——Scikit-learn。我们将讲解该包的基本用法,并且提供两个实际示例来帮助你更好地理解。
安装Scikit-learn
在使用Scikit-learn之前,我们首先要安装该包。我们建议使用pip来安装Scikit-learn:
pip install -U scikit-learn
Scikit-learn的使用
1. 加载数据集
我们通常需要加载一些数据来训练机器学习模型。Scikit-learn提供了一些内置的数据集供我们使用。例如,我们可以使用如下代码加载Iris数据集:
from sklearn.datasets import load_iris
iris = load_iris()
2. 准备数据集并训练模型
一旦我们有了数据集,我们就可以将其准备成机器学习算法适用的格式,并训练模型。在Scikit-learn中,我们可以使用pipeline来实现这一点。pipeline把数据转换器(比如标准化和PCA)和分类器组合在一起。例如:
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.linear_model import LogisticRegression
# 创建pipeline
pipe_lr = Pipeline([('scl', StandardScaler()),
('pca', PCA(n_components=2)),
('clf', LogisticRegression(random_state=1))])
# 训练模型
pipe_lr.fit(X_train, y_train)
3. 评估模型
在训练完模型后,我们需要评估其性能。在Scikit-learn中,我们通常使用交叉验证方法来评估模型。以下示例展示了如何使用10折交叉验证来评估模型性能:
from sklearn.cross_validation import cross_val_score
scores = cross_val_score(estimator=pipe_lr,
X=X_train,
y=y_train,
cv=10,
n_jobs=1)
4. 执行预测
有了训练好的模型,我们就可以用它来进行预测。以下示例展示了如何使用训练好的模型来预测新的数据:
y_pred = pipe_lr.predict(X_test)
示例1:垃圾邮件分类
现在我们有一些电子邮件,其中一些是垃圾邮件,一些不是。我们需要训练一个模型来自动将其归类。在这个例子中,我们将使用朴素贝叶斯算法来训练模型,并使用分层交叉验证评估模型性能。
# 加载数据
import numpy as np
path = 'https://archive.ics.uci.edu/ml/machine-learning-databases/spambase/spambase.data'
data = np.loadtxt(path, delimiter=',')
X = data[:, :-1]
y = data[:, -1]
# 准备数据并训练模型
from sklearn.naive_bayes import GaussianNB
from sklearn.cross_validation import StratifiedKFold
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
accuracy_scores = []
precision_scores = []
recall_scores = []
f1_scores = []
skf = StratifiedKFold(y, 10)
for train_idx, test_idx in skf:
X_train = X[train_idx]
y_train = y[train_idx]
X_test = X[test_idx]
y_test = y[test_idx]
# 创建Pipeline
pipeline = Pipeline([
('scl', StandardScaler()),
('clf', GaussianNB())
])
# 训练模型
pipeline.fit(X_train, y_train)
# 预测和评估
y_pred = pipeline.predict(X_test)
accuracy_scores.append(accuracy_score(y_test, y_pred))
precision_scores.append(precision_score(y_test, y_pred))
recall_scores.append(recall_score(y_test, y_pred))
f1_scores.append(f1_score(y_test, y_pred))
print("Accuracy: %.3f%% (+/- %.3f%%)" % (np.mean(accuracy_scores), np.std(accuracy_scores)))
print("Precision: %.3f%% (+/- %.3f%%)" % (np.mean(precision_scores), np.std(precision_scores)))
print("Recall: %.3f%% (+/- %.3f%%)" % (np.mean(recall_scores), np.std(recall_scores)))
print("F1: %.3f%% (+/- %.3f%%)" % (np.mean(f1_scores), np.std(f1_scores)))
示例2:房价预测
在这个例子中,我们将使用多变量线性回归算法来预测房价。我们将使用Pandas来加载数据集,并使用Scikit-learn中的线性回归算法来训练模型。
# 加载数据
import pandas as pd
import numpy as np
df = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/housing/housing.data',
header=None,
sep='\s+')
df.columns = ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV']
# 准备数据并训练模型
from sklearn.linear_model import LinearRegression
from sklearn.cross_validation import train_test_split
from sklearn.metrics import r2_score, mean_squared_error
X = df.iloc[:, :-1].values
y = df['MEDV'].values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
slr = LinearRegression()
slr.fit(X_train, y_train)
# 预测
y_pred = slr.predict(X_test)
# 评估性能
print('R^2: %.3f' % r2_score(y_test, y_pred))
print('MSE: %.3f' % mean_squared_error(y_test, y_pred))
结论
Scikit-learn是Python机器学习领域中最强大的工具之一。在本文中,我们学习了Scikit-learn的基本用法,并提供了两个实际的例子来帮助您更好地了解它的使用。你可以深入学习该包的其他方面来更好地利用它的功能,比如使用网格搜索来优化算法的超参数。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python机器学习工具scikit-learn的使用笔记 - Python技术站