我已经知道" xgboost.XGBRegressor是XGBoost的Scikit-Learn Wrapper界面."
但他们还有其他区别吗?
我是xgboost的新手,我想可视化我的xgboost模型。
这是我的代码,该代码来自教程,可能没有错误。
from numpy import loadtxt
from xgboost import XGBClassifier
from xgboost import plot_tree
import matplotlib.pyplot as plt
dataset = loadtxt('pima-indians-diabetes.csv', delimiter=",")
X = dataset[:,0:8]
y = dataset[:,8]
model = XGBClassifier()
model.fit(X, y)
plot_tree(model)
plt.show()
Run Code Online (Sandbox Code Playgroud)
我使用UBuntu并安装了graphviz,运行此代码将获得
Traceback (most recent call last):
File "a.py", line 15, in <module>
plot_tree(model)
File "/home/statham/anaconda2/lib/python2.7/site-packages/xgboost/plotting.py", line 214, in plot_tree
g = to_graphviz(booster, num_trees=num_trees, rankdir=rankdir, **kwargs)
File "/home/statham/anaconda2/lib/python2.7/site-packages/xgboost/plotting.py", line 160, in to_graphviz
raise ValueError('booster must be Booster instance')
ValueError: booster must be Booster instance
Run Code Online (Sandbox Code Playgroud)
我知道关键是我的模型不是Booster实例,我搜索了Google却没有找到答案,有人可以告诉我如何将我的模型转换为Booster实例吗?提前致谢。
该唯一的区别是传递给的DataLoader的参数之一是输入“numpy.array”,另一种是在类型“列表中”,但给人的DataLoader完全不同的结果。
您可以使用以下代码来重现它:
from torch.utils.data import DataLoader,Dataset
import numpy as np
class my_dataset(Dataset):
def __init__(self,data,label):
self.data=data
self.label=label
def __getitem__(self, index):
return self.data[index],self.label[index]
def __len__(self):
return len(self.data)
train_data=[[1,2,3],[5,6,7],[11,12,13],[15,16,17]]
train_label=[-1,-2,-11,-12]
########################### Look at here:
test=DataLoader(dataset=my_dataset(np.array(train_data),train_label),batch_size=2)
for i in test:
print ("numpy data:")
print (i)
break
test=DataLoader(dataset=my_dataset(train_data,train_label),batch_size=2)
for i in test:
print ("list data:")
print (i)
break
Run Code Online (Sandbox Code Playgroud)
结果是:
numpy data:
[tensor([[1, 2, 3],
[5, 6, 7]]), tensor([-1, -2])]
list data:
[[tensor([1, 5]), tensor([2, 6]), tensor([3, 7])], tensor([-1, -2])]
Run Code Online (Sandbox Code Playgroud) 而在很多代码中,例如here、here和here,代码实现为:
KL_loss = -0.5 * torch.sum(1 + logv - mean.pow(2) - logv.exp())
Run Code Online (Sandbox Code Playgroud)
或者
def latent_loss(z_mean, z_stddev):
mean_sq = z_mean * z_mean
stddev_sq = z_stddev * z_stddev
return 0.5 * torch.mean(mean_sq + stddev_sq - torch.log(stddev_sq) - 1)
Run Code Online (Sandbox Code Playgroud)
它们有何关系?为什么代码中没有“tr”或“.transpose()”?
我无法理解在这样的一个生成器中使用多个"for"的代码,我搜索了Google并没有找到任何答案:
print [j for i in [[1,2],[4,6]] for j in i ]
# will print [1, 2, 4, 6]
print [j for j in i for i in [[1,2],[4,6]] ]
# will print [4, 4, 6, 6]
Run Code Online (Sandbox Code Playgroud)
有什么不同?
如何解释这样的代码?
我知道我可以使用“ append()”将元素添加到列表中,但是为什么赋值返回None?
>>> a=[1,2,3]
>>> a.append(4)
>>> print a
[1, 2, 3, 4]
>>> a=a.append(5)
>>> print a
None
>>>
Run Code Online (Sandbox Code Playgroud) python ×6
list ×3
pytorch ×2
xgboost ×2
append ×1
autoencoder ×1
for-loop ×1
generator ×1
graphviz ×1
iterator ×1
matplotlib ×1
numpy ×1
regression ×1
scikit-learn ×1