写一段python代码,对 Excel 文件,以第17(其中1代表喜欢,2代表不喜欢,3一般)、18(其中1代表优秀,2代表良好,3代表中等,4代表及格,5代表不及格)、19(其中1代表优秀,2代表比较优秀,3代表一般,4代表比较差,5代表非常差)、20列(其中1代表是,2否)作为特征输入,第39列作为目标输出(其中1代表从事本专业工作,2代表从事本专业相关工作,3代表从事本专业无关工作,4代表不太确定)。构建可视化决策树,以图片形式可视化决策树,最后显示准确率,要求输入一组数据要预测出结果
时间: 2023-06-24 14:02:57 浏览: 138
以下是实现上述功能的Python代码:
```python
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.tree import export_graphviz
import graphviz
# 读取Excel文件
data = pd.read_excel('data.xlsx')
# 提取特征和目标列
feature_cols = ['17', '18', '19', '20']
X = data[feature_cols]
y = data['39']
# 将特征转换成数值型
X['17'] = X['17'].map({1: '喜欢', 2: '不喜欢', 3: '一般'})
X['18'] = X['18'].map({1: '优秀', 2: '良好', 3: '中等', 4: '及格', 5: '不及格'})
X['19'] = X['19'].map({1: '优秀', 2: '比较优秀', 3: '一般', 4: '比较差', 5: '非常差'})
X['20'] = X['20'].map({1: '是', 2: '否'})
# 将特征转换成哑变量
X = pd.get_dummies(X)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)
# 训练决策树分类器
clf = DecisionTreeClassifier(random_state=1)
clf.fit(X_train, y_train)
# 可视化决策树
dot_data = export_graphviz(clf, out_file=None, feature_names=X.columns, class_names=['本专业工作', '本专业相关工作', '本专业无关工作', '不太确定'])
graph = graphviz.Source(dot_data)
graph.render('decision_tree')
# 预测测试集的结果
y_pred = clf.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print('准确率:', accuracy)
# 预测一组数据的结果
new_data = {'17': 1, '18': 2, '19': 3, '20': 1}
new_data = pd.Series(new_data)
new_data['17'] = '喜欢'
new_data['18'] = '良好'
new_data['19'] = '一般'
new_data['20'] = '是'
new_data = pd.get_dummies(new_data)
y_pred = clf.predict(new_data)
print('预测结果:', y_pred)
```
其中,`data.xlsx` 是包含数据的 Excel 文件,特征列为第17、18、19、20列,目标列为第39列。代码将特征列转换成数值型,并将其转换成哑变量,然后使用决策树分类器进行训练和预测,最后可视化决策树并计算准确率。预测一组数据的结果也被打印出来。
阅读全文