如何在Python中使用决策树进行分类和回归分析
在Python中,我们可以使用scikit-learn库来使用决策树进行分类和回归分析。接下来我们将对这个过程进行详细解释。
- 导入必要的库
我们需要导入以下库:numpy、pandas、scikit-learn。其中numpy和pandas用于数据处理,scikit-learn用于建立决策树。
import numpy as np import pandas as pd from sklearn.tree import DecisionTreeClassifier, DecisionTreeRegressor
- 数据处理
首先我们需要准备数据。我们可以通过Pandas库读取CSV文件或手动创建数据集。
例如,我们创建一个分类数据集:
data = pd.DataFrame({ 'Name': ['John', 'Mike', 'Jane', 'Sarah', 'Sam', 'Lee', 'Paul', 'Steven', 'Tom'], 'Age' : [25, 30, 18, 40, 35, 28, 18, 22, 37], 'Education' : ['Bachelor', 'Master', 'Bachelor', 'PhD', 'Bachelor', 'Master', 'Master', 'PhD', 'Bachelor'], 'Sex' : ['Male', 'Male', 'Female', 'Female', 'Male', 'Male', 'Male', 'Male', 'Male'], 'Income' : [50000, 80000, 25000, 125000, 75000, 60000, 90000, 45000, 98000], 'Class' : ['A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C'] })
这里我们创建了一个包含了Name、Age、Education、Sex、Income和Class列的数据集。
- 特征工程
接下来我们需要对数据进行特征工程处理。这个过程包括了特征选择、特征提取和特征变换。
首先我们需要将字符串类型的特征值转换为数值类型。在这个例子中,我们将Education和Sex列的值转换为数值类型。
data['Education'] = data['Education'].map({'Bachelor': 1, 'Master': 2, 'PhD': 3}) data['Sex'] = data['Sex'].map({'Male': 1, 'Female': 0})
然后我们需要将特征值和目标列分离出来,以便我们可以将数据集分为训练集和测试集。
X = data.drop(['Name', 'Class'], axis = 1) y = data['Class']
- 模型训练
现在我们已经准备好数据,可以开始训练决策树模型了。
在分类问题中,我们可以使用DecisionTreeClassifier类:
clf = DecisionTreeClassifier() clf.fit(X, y)
在回归问题中,我们可以使用DecisionTreeRegressor类:
clf = DecisionTreeRegressor() clf.fit(X, y)
这里的X是特征值矩阵,y是目标列。
- 预测
现在,我们已经训练好了模型,可以使用predict()函数来对新数据进行预测:
new_data = np.array([[30, 2, 1, 1, 70000]]) clf.predict(new_data)
这里的new_data包含了一个新样本的特征值。predict()函数返回的是该样本的预测值。
- 模型评估
我们可以通过测试数据集来评估模型的性能。在这个例子中,我们将数据集分为训练集和测试集:
from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 1) clf.fit(X_train, y_train) y_pred = clf.predict(X_test)
这里我们使用了train_test_split()函数将数据集划分为训练集和测试集。我们在训练集上训练模型,然后在测试集上进行预测,最终使用accuracy_score()函数评估模型性能。
from sklearn.metrics import accuracy_score print('Accuracy: ', accuracy_score(y_test, y_pred))
这里的accuracy_score()函数返回的是预测准确率。
完整代码演示:
import numpy as np import pandas as pd from sklearn.tree import DecisionTreeClassifier, DecisionTreeRegressor from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score # 数据处理 data = pd.DataFrame({ 'Name': ['John', 'Mike', 'Jane', 'Sarah', 'Sam', 'Lee', 'Paul', 'Steven', 'Tom'], 'Age' : [25, 30, 18, 40, 35, 28, 18, 22, 37], 'Education' : ['Bachelor', 'Master', 'Bachelor', 'PhD', 'Bachelor', 'Master', 'Master', 'PhD', 'Bachelor'], 'Sex' : ['Male', 'Male', 'Female', 'Female', 'Male', 'Male', 'Male', 'Male', 'Male'], 'Income' : [50000, 80000, 25000, 125000, 75000, 60000, 90000, 45000, 98000], 'Class' : ['A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C'] }) data['Education'] = data['Education'].map({'Bachelor': 1, 'Master': 2, 'PhD': 3}) data['Sex'] = data['Sex'].map({'Male': 1, 'Female': 0}) X = data.drop(['Name', 'Class'], axis = 1) y = data['Class'] # 模型训练 clf = DecisionTreeClassifier() clf.fit(X, y) # 预测 new_data = np.array([[30, 2, 1, 1, 70000]]) print(clf.predict(new_data)) # 模型评估 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 1) clf.fit(X_train, y_train) y_pred = clf.predict(X_test) print('Accuracy: ', accuracy_score(y_test, y_pred))
相关文章