【发布时间】:2017-01-05 18:50:37
【问题描述】:
我使用来自 UCI 存储库的数据集:http://archive.ics.uci.edu/ml/datasets/Energy+efficiency 然后下一步:
from pandas import *
from sklearn.neighbors import KNeighborsRegressor
from sklearn.linear_model import LinearRegression, LogisticRegression
from sklearn.svm import SVR
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import r2_score
from sklearn.cross_validation import train_test_split
dataset = read_excel('/Users/Half_Pint_boy/Desktop/ENB2012_data.xlsx')
dataset = dataset.drop(['X1','X4'], axis=1)
trg = dataset[['Y1','Y2']]
trn = dataset.drop(['Y1','Y2'], axis=1)
然后做模型并交叉验证:
models = [LinearRegression(),
RandomForestRegressor(n_estimators=100, max_features ='sqrt'),
KNeighborsRegressor(n_neighbors=6),
SVR(kernel='linear'),
LogisticRegression()
]
Xtrn, Xtest, Ytrn, Ytest = train_test_split(trn, trg, test_size=0.4)
我正在创建一个回归模型来预测值,但有一个问题。代码如下:
TestModels = DataFrame()
tmp = {}
for model in models:
m = str(model)
tmp['Model'] = m[:m.index('(')]
for i in range(Ytrn.shape[1]):
model.fit(Xtrn, Ytrn[:,i])
tmp[str(i+1)] = r2_score(Ytest[:,0], model.predict(Xtest))
TestModels = TestModels.append([tmp])
TestModels.set_index('Model', inplace=True)
它显示不可散列的类型:'slice' for line model.fit(Xtrn, Ytrn[:,i])
如何避免并使其发挥作用?
谢谢!
【问题讨论】:
-
尝试将
model.fit(Xtrn, Ytrn[:,i])改为model.fit(Xtrn, Ytrn[:i]),去掉逗号 -
请发布整个回溯和/或发布完整的可运行代码,以便我自己获取回溯。
-
如果
Ytrn是DataFrame,我可以重现错误消息TypeError: unhashable type: 'slice'。在这种情况下,您需要使用Ytrn.iloc[:, i]而不是Ytrn[:, i]。见stackoverflow.com/q/34215501/190597。 -
谢谢,iloc 有效。但随后出现:未知标签类型:数组([29.9、26.84、28.07、39.89、14.32、11.33、15.55、10.39])。是因为二维数组吗?
-
看起来像一维数组。请发布一个生成错误的可运行示例,这样我们就不必猜测了。
标签: python pandas scikit-learn slice prediction