Skip to main content

        创建数据模型流程 - Featured image

创建数据模型流程

通过一个鸢尾花数据集展示的数据建模流程

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 对决策树模型进行超参数调优,寻找最佳的超参数组合,并输出优化后的模型准确率。