通过一个鸢尾花数据集展示的数据建模流程
pandas相关库以及数据集的提取
importpandasaspd
fromsklearn.datasetsimportload_iris
importmatplotlib.pyplotasplt
importseabornassns
pd.set_option('display.unicode.east_asian_width',True)
#加载鸢尾花数据集
data=load_iris()
df=pd.DataFrame(data.data,columns=data.feature_names)
df['target'] =data.target
df['species'] =df['target'].apply(lambdax:data.target_names[x])
print(df.head())
标准化
fromsklearn.preprocessingimportStandardScaler
x=df.drop(columns=['target','species'])
y=df['target']
scaler=StandardScaler()
X_scaled=scaler.fit_transform(x)
特征选择
fromsklearn.feature_selectionimportSelectKBest,f_classif
selector=SelectKBest(f_classif,k=2) # 选择前k个最好的特征
X_new=selector.fit_transform(X_scaled,y)
selectoed_features=selector.get_support(indices=True)#打印选择的特征
建立一个分类模型,使用决策树或SVM进行分类
(1)使用决策树分类器
fromsklearn.model_selectionimporttrain_test_split#划分数据集
fromsklearn.treeimportDecisionTreeClassifier#决策树分类器
fromsklearn.metricsimportaccuracy_score#准确率
#划分数据集
X_train,X_test,y_train,y_test=train_test_split(X_new,y,test_size=0.2,random_state=42)
#决策树分类器
model_dt=DecisionTreeClassifier(random_state=42)
#训练模型
model_dt.fit(X_train,y_train)
#预测
y_pred_dt=model_dt.predict(X_test)
#准确率
accuracy_dt=accuracy_score(y_test,y_pred_dt)
# print(f"决策树分类器准确率:{.4f}",accuracy_dt)
(2)使用SVM进行分类
from sklearn.model_selection
import train_test_split#划分数据集
from sklearn.svm
import SVC#支持向量机分类器
from sklearn.metrics
import accuracy_score#准确率
#划分数据集
X_train,X_test,y_train,y_test = train_test_split(X_new,y,test_size=0.2,random_state=42)
#初始化SVM分类器
model_svm = SVC(kernel='linear',random_state=42)
#训练模型
model_svm.fit(X_train,y_train)
#预测
y_pred_svm = model_svm.predict(X_test)
#准确率
accuracy_svm = accuracy_score(y_test,y_pred_svm)
print("SVM分类器准确率:{accuracy_svm:.4f}")
四、评估模型
(1)使用混淆矩阵评估模型
from sklearn.metrics
import confusion_matrix#混淆矩阵
cm = confusion_matrix(y_test,y_pred_dt)
from sklearn.metrics
import classification_report#分类报告
report = classification_report(y_test,y_pred_dt)
(2)使用ROC曲线评估模型,但只适用于二分类问题,因此本例中不适用
from sklearn.metrics
import roc_curve#ROC曲线
from sklearn.metrics
import auc#AUC
fpr,tpr,thresholds= roc_curve(y_test,y_pred_dt)
roc_auc = auc(fpr,tpr)
五、模型调优:网格搜索调优
#定义决策树的参数网络
param_grid= {'max_depth':[3,5,10,None],'min_samples_split':[2,5,10],'min_samples_leaf':[1,2,4]}
#初始化模型
fromsklearn.treeimportDecisionTreeClassifier
fromsklearn.model_selectionimportGridSearchCV#网格搜索
grid_search=GridSearchCV(estimator=DecisionTreeClassifier(random_state=42),param_grid=param_grid,cv=5)
#训练模型
grid_search.fit(X_train,y_train)
#打印最佳参数,最佳准确率,最佳模型
# print(grid_search.best_params_,grid_search.best_score_,grid_search.best_estimator_)
#预测
y_pred_grid=grid_search.best_estimator_.predict(X_test)
#准确率
accuracy_grid=accuracy_score(y_test,y_pred_grid)
# print(f"网格搜索决策树分类器准确率:{accuracy_grid:.4f}")
六、模型保存与加载
(1)使用joblib保存模型
importjoblib
#保存模型到本地
joblib.dump(grid_search.best_estimator_,'iris_model.pkl')
#加载模型
model_load=joblib.load('iris_model.pkl')
(2)使用pickle保存模型
import pickle
#保存模型到本地
with open('iris_model.pkl','wb') as f:pickle.dump(grid_search.best_estimator_,f)
#加载模型
with open('iris_model.pkl','rb') as f:
model_load= pickle.load(f)
总结:
1.数据加载:
使用 load_iris() 加载鸢尾花数据集,并将数据转换为 DataFrame 格式,以便查看和分析。
2.数据可视化:
使用seaborn 的 pairplot 绘制各特征之间的散点图矩阵,并通过 heatmap 绘制特征之间的相关性热力图。
3.特征选择与数据预处理:
提取特征(X)和标签(y),并对特征数据进行标准化处理,使得每个特征的均值为 0,方差为 1。
4.建立分类模型:
使用 DecisionTreeClassifier 和 SVC 分别训练决策树分类器和支持向量机分类器,并评估它们在测试集上的准确率。
5.模型评估:
使用 classification_report 和 confusion_matrix 输出模型的详细评估指标,包括精度、召回率、F1 分数以及混淆矩阵。
6.网格搜索调优:
使用 GridSearchCV 对决策树模型进行超参数调优,寻找最佳的超参数组合,并输出优化后的模型准确率。