导入所需的库
1 2 3 4
| import pandas as pd from sklearn.model_selection import train_test_split from sklearn.tree import DecisionTreeClassifier from sklearn.metrics import accuracy_score
|
读取数据集
1 2
| file_path = r'C:\Users\Administrator\Desktop\数据集.xlsx' df = pd.read_excel(file_path, sheet_name='训练和测试集')
|
1 2 3 4 5 6 7
| direction_mapping = {'W': 1, 'NNE': 2, 'SSW': 3, 'SSE': 4, 'N': 5, 'SE': 6, 'ESE': 7, 'S': 8, 'E': 9, 'NE': 10}
df['最强阵风的方向'] = df['最强阵风的方向'].map(direction_mapping) df['风向9am'] = df['风向9am'].map(direction_mapping) df['风向3pm'] = df['风向3pm'].map(direction_mapping)
|
处理分类变量:
direction_mapping
是一个字典,将风向的文字类别映射为对应的数字。例如,’W’映射为1,’NNE’映射为2,以此类推。
map
函数用于根据提供的映射将数据中的文字类别转换为对应的数字。
1 2 3
| X = df.drop(['日期', '今天是否下雨'], axis=1) y = df['今天是否下雨']
|
分离特征和目标变量:
df.drop(['日期', '今天是否下雨'], axis=1)
:从数据框中删除’日期’和’今天是否下雨’列,得到特征集X
。
df['今天是否下雨']
:获取目标变量y
,即’今天是否下雨’列。
1 2
| X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.007, random_state=42)
|
划分训练集和测试集:
train_test_split(X, y, test_size=0.007, random_state=42)
:将特征集X
和目标变量y
划分为训练集和测试集。
test_size=0.007
表示测试集占总数据的0.7%。
random_state=42
用于设置随机种子,以确保划分的一致性。
1 2 3
| clf = DecisionTreeClassifier(random_state=42) clf.fit(X_train, y_train)
|
训练决策树分类器:
DecisionTreeClassifier(random_state=42)
:创建了一个决策树分类器对象,其中random_state=42
用于设置随机种子,以保持模型的一致性。
clf.fit(X_train, y_train)
:使用训练集X_train
和对应的目标变量y_train
来训练决策树分类器。
1 2
| prediction_test = clf.predict(X_test)
|
测试集预测:
clf.predict(X_test)
:使用训练好的决策树模型对测试集X_test
进行预测,得到预测结果prediction_test
。
1 2 3
| accuracy_test = accuracy_score(y_test, prediction_test) print(f"测试集准确率: {accuracy_test}")
|
计算测试集准确率:
accuracy_score(y_test, prediction_test)
:使用测试集的真实标签y_test
和模型预测的结果prediction_test
来计算模型在测试集上的准确率。
- 打印测试集准确率。
1 2 3 4 5 6 7
| predict_df = pd.read_excel(file_path, sheet_name='需要预测的下雨情况')
predict_df['最强阵风的方向'] = predict_df['最强阵风的方向'].map(direction_mapping) predict_df['风向9am'] = predict_df['风向9am'].map(direction_mapping) predict_df['风向3pm'] = predict_df['风向3pm'].map(direction_mapping)
|
处理预测集的分类变量:
- 从Excel文件中读取包含需要预测的数据,同样将文字类别映射为数字。
1 2 3
| X_predict = predict_df.drop(['日期', '今天是否下雨'], axis=1) prediction_predict = clf.predict(X_predict)
|
预测集预测:
- 使用训练好的决策树模型对预测集
X_predict
进行预测,得到预测结果prediction_predict
。
1 2
| predict_df['今天是否下雨'] = prediction_predict
|
合并预测结果:
- 将模型在预测集上的结果
prediction_predict
添加到预测集的数据框中。
1 2
| print(predict_df[['日期', '今天是否下雨']])
|
打印预测结果:
打印包含日期和预测是否下雨的结果的数据框。
总结一下,这段代码主要进行了以下步骤:
数据读取和预处理:
- 通过Pandas读取包含训练和测试集的Excel文件。
- 将风向等分类变量映射为数字。
数据集划分:
- 使用
train_test_split
将数据集划分为训练集和测试集。
模型训练:
模型评估:
预测集处理和预测:
- 从Excel文件中读取包含需要预测的数据。
- 对预测集中的分类变量进行数字映射。
- 使用训练好的决策树模型进行预测。
结果展示:
- 将预测结果合并到预测集,打印包含日期和预测是否下雨的最终结果。
这段代码是一个简单的机器学习任务示例,使用了决策树分类器来预测某一天是否会下雨,通过对数据的处理、模型的训练和测试集的评估,最后得到了预测结果。