import pandas as pd import openpyxl # import matplotlib.pyplot as plt import numpy as np from sklearn.ensemble import AdaBoostClassifier from sklearn.model_selection import train_test_split # 打开Excel文件 wb = openpyxl.load_workbook('./处理过的训练集/987027.xlsx') # 选择需要读取的工作表 ws = wb['Sheet1'] # 读取第一列第二行之后的数据 data = [] for row in ws.iter_rows(min_row=2, min_col=1, values_only=True): data.append(row[0]) # 打印读取的数据 # print(data) # # 将浮点型数据按照等宽离散化的方法转化为离散型数据 # bin_edges = np.linspace(min(data), max(data), num=10) # discretized_data = np.digitize(data, bin_edges) # # 打印转化后的数据 # print(discretized_data) # 假设数据共有N个点,采样周期为0.25秒 N = len(data) t = np.arange(N) * 0.25 # labels2 = pd.cut(t, bins=10, labels=False) #组合时间序列和采样值 data1 = np.column_stack((t,data)) print(data1[:10]) # 打印前10行数据 # train_test_split函数用于将数据集划分为训练集和测试集,其中test_size参数指定了测试集所占的比例, # random_state参数指定了随机种子,以保证每次划分的结果相同。 X_train, X_test, y_train, y_test = train_test_split(data1[:, :-1], data1[:, -1], test_size=0.2, random_state=42) clf = AdaBoostClassifier(n_estimators=100, random_state=0) clf.fit(X_train, y_train) clf.predict([[0,0,0,0]]) clf.score(X_train, y_train)报错ValueError: X has 2 features, but AdaBoostClassifier is expecting 1 features as input.
时间: 2024-02-04 12:03:08 浏览: 68
PyCharm 无法 import pandas 程序卡住的解决方式
根据代码中的错误提示,可以看出AdaBoostClassifier期望的特征数量为1,但是在训练和测试数据中,特征数量为2,这是导致报错的原因之一。另外,代码的最后一行clf.predict([[0,0,0,0]])也需要修改,因为数据集中的特征数量为2,而预测数据的特征数量为4,也是不匹配的。可以将预测数据的特征数量修改为2,如下所示:
```
import pandas as pd
import openpyxl
import numpy as np
from sklearn.ensemble import AdaBoostClassifier
from sklearn.model_selection import train_test_split
# 打开Excel文件
wb = openpyxl.load_workbook('./处理过的训练集/987027.xlsx')
# 选择需要读取的工作表
ws = wb['Sheet1']
# 读取第一列第二行之后的数据
data = []
for row in ws.iter_rows(min_row=2, min_col=1, values_only=True):
data.append(row[0])
# 假设数据共有N个点,采样周期为0.25秒
N = len(data)
t = np.arange(N) * 0.25
# 组合时间序列和采样值
data1 = np.column_stack((t,data))
print(data1[:10])
# train_test_split函数用于将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(data1[:, :-1], data1[:, -1], test_size=0.2, random_state=42)
# 修改AdaBoostClassifier期望的特征数量为1
clf = AdaBoostClassifier(n_estimators=100, random_state=0)
clf.fit(X_train, y_train)
clf.predict([[0,0]])
# 修改预测数据的特征数量为2
clf.score(X_train, y_train)
```
注意,上述修改只是解决了特征数量不匹配的问题,如果还有其他问题需要进一步调试。
阅读全文