Scikit-learn是一个基于Python的开源机器学习库,广泛用于数据挖掘和数据分析。以下是一些Scikit-learn中常用知识点的代码演示:
1. 导入库和准备数据
# 导入所需的库
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# 加载数据集,这里以鸢尾花数据集为例
iris = datasets.load_iris()
X = iris.data # 特征
y = iris.target # 标签
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 特征缩放
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
2. 线性回归
from sklearn.linear_model import LinearRegression
# 创建线性回归模型
lr = LinearRegression()
# 训练模型
lr.fit(X_train, y_train)
# 预测
y_pred = lr.predict(X_test)
# 评估模型
from sklearn.metrics import mean_squared_error
print("Mean Squared Error:", mean_squared_error(y_test, y_pred))
3. 逻辑回归
from sklearn.linear_model import LogisticRegression
# 创建逻辑回归模型
log_reg = LogisticRegression()
# 训练模型
log_reg.fit(X_train, y_train)
# 预测
y_pred = log_reg.predict(X_test)
# 评估模型
from sklearn.metrics import accuracy_score
print("Accuracy:", accuracy_score(y_test, y_pred))
4. 决策树
from sklearn.tree import DecisionTreeClassifier
# 创建决策树分类器
dt = DecisionTreeClassifier()
# 训练模型
dt.fit(X_train, y_train)
# 预测
y_pred = dt.predict(X_test)
# 评估模型
print("Accuracy:", accuracy_score(y_test, y_pred))
5. 随机森林
from sklearn.ensemble import RandomForestClassifier
# 创建随机森林分类器
rf = RandomForestClassifier(n_estimators=100)
# 训练模型
rf.fit(X_train, y_train)
# 预测
y_pred = rf.predict(X_test)
# 评估模型
print("Accuracy:", accuracy_score(y_test, y_pred))
6. 支持向量机(SVM)
from sklearn.svm import SVC
# 创建SVM分类器
svm = SVC()
# 训练模型
svm.fit(X_train, y_train)
# 预测
y_pred = svm.predict(X_test)
# 评估模型
print("Accuracy:", accuracy_score(y_test, y_pred))
7. K-近邻(KNN)
from sklearn.neighbors import KNeighborsClassifier
# 创建KNN分类器
knn = KNeighborsClassifier(n_neighbors=5)
# 训练模型
knn.fit(X_train, y_train)
# 预测
y_pred = knn.predict(X_test)
# 评估模型
print("Accuracy:", accuracy_score(y_test, y_pred))
8. 模型持久化
import joblib
# 保存模型
joblib.dump(lr, 'linear_regression_model.pkl')
# 加载模型
loaded_lr_model = joblib.load('linear_regression_model.pkl')
# 使用加载的模型进行预测
loaded_y_pred = loaded_lr_model.predict(X_test)
这些示例涵盖了Scikit-learn中的一些基本概念和常用算法。
在机器学习项目中,特征工程、参数调优和模型评估是提高模型性能的关键步骤。以下是一些示例代码,展示如何使用Scikit-learn进行这些步骤:
特征工程
特征工程包括特征选择、特征提取和特征转换等操作。
特征选择
使用SelectKBest进行特征选择:
from sklearn.feature_selection import SelectKBest, f_classif
# 选择最好的k个特征
k = 4 # 例如选择4个特征
selector = SelectKBest(f_classif, k=k)
X_train_selected = selector.fit_transform(X_train, y_train)
X_test_selected = selector.transform(X_test)
特征提取
使用PCA进行主成分分析:
from sklearn.decomposition import PCA
# 降维到2个主成分
pca = PCA(n_components=2)
X_train_pca = pca.fit_transform(X_train)
X_test_pca = pca.transform(X_test)
参数调优
使用GridSearchCV或RandomizedSearchCV进行参数调优:
from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestClassifier
# 定义参数网格
param_grid = {
'n_estimators': [100, 200, 300],
'max_depth': [None, 10, 20],
'min_samples_split': [2, 5, 10]
}
# 创建随机森林分类器
rf = RandomForestClassifier()
# 创建GridSearchCV对象
grid_search = GridSearchCV(estimator=rf, param_grid=param_grid, cv=5, n_jobs=-1)
# 训练模型
grid_search.fit(X_train, y_train)
# 打印最佳参数
print("Best parameters:", grid_search.best_params_)
模型评估
使用交叉验证和不同的评估指标来评估模型性能:
from sklearn.model_selection import cross_val_score
from sklearn.metrics import classification_report, confusion_matrix
# 使用交叉验证评估模型
scores = cross_val_score(rf, X_train, y_train, cv=5)
print("Accuracy scores:", scores)
print("Mean accuracy:", scores.mean())
# 使用最佳参数训练模型
best_rf = grid_search.best_estimator_
# 训练和预测
best_rf.fit(X_train, y_train)
y_pred = best_rf.predict(X_test)
# 打印分类报告
print(classification_report(y_test, y_pred))
# 打印混淆矩阵
print(confusion_matrix(y_test, y_pred))
这些代码示例展示了如何进行特征工程、参数调优和模型评估。在实际应用中,你可能需要根据具体问题和数据集调整这些步骤和参数。此外,还有许多其他的特征工程方法和模型评估技术,可以根据需要选择使用。