나는랜덤 포레스트이 두 수치를 결합하여 TikZ에서. TikZ 사진은 두 번째 이미지에 존재하는 다양한 트리 구조를 가져야 하며 첫 번째에 표시된 것처럼 단일 샘플(빨간색 점)의 각 트리를 통과하는 경로도 표시해야 합니다.
이것이 내가 지금까지 가지고 있는 것입니다.
\documentclass{standalone}
\usepackage{forest}
\begin{document}
\begin{forest} for tree={l sep=3em, s sep=3em, anchor=center, inner sep=0.7em, fill=blue!50, circle, font=\Large\sffamily}
[Training Data, draw, rectangle, rounded corners, orange, text=white
[,red!70[[][]][,red!70[[][]][,red!70[,red!70][]]]]
[,red!70[,red!70[[][]][,red!70]][[][[][]]]]
[,red!70[[][]][,red!70[,red!70[][,red!70]][]]]
]
\end{forest}
\end{document}
나는 아직도 다음과 같은 문제로 어려움을 겪고 있습니다.
- 두 번째 이미지와 같이 각 나무(나무 1, 나무 2, 나무 n) 주위에 상자를 그리고 번호를 매깁니다.
- 트리 2와 n 사이에 점 3개를 얻습니다.
- 이미지 1과 같이 샘플이 각 나무를 통과하는 경로를 따라 화살표를 그립니다.
- 하단에 있는 모든 트리의 결과를 "분류에 대한 과반수 투표/회귀에 대한 평균"이라는 텍스트와 결합합니다.
이에 대한 도움을 주시면 감사하겠습니다!
업데이트
user121799님의 엄청난 도움 덕분에 완성된 TikZ 이미지입니다.
\documentclass[tikz]{standalone}
\usepackage{forest}
\usetikzlibrary{fit,positioning}
\tikzset{
font=\Large\sffamily\bfseries,
red arrow/.style={
midway,red,sloped,fill, minimum height=3cm, single arrow, single arrow head extend=.5cm, single arrow head indent=.25cm,xscale=0.3,yscale=0.15,
allow upside down
},
black arrow/.style 2 args={-stealth, shorten >=#1, shorten <=#2},
black arrow/.default={1mm}{1mm},
tree box/.style={draw, rounded corners, inner sep=1em},
node box/.style={white, draw=black, text=black, rectangle, rounded corners},
}
\begin{document}
\begin{forest}
for tree={l sep=3em, s sep=3em, anchor=center, inner sep=0.7em, fill=blue!50, circle, where level=2{no edge}{}}
[
Training Data, node box
[sample and feature bagging, node box, alias=bagging, above=4em
[,red!70,alias=a1[[,alias=a2][]][,red!70,edge label={node[above=1ex,red arrow]{}}[[][]][,red!70,edge label={node[above=1ex,red arrow]{}}[,red!70,edge label={node[below=1ex,red arrow]{}}][,alias=a3]]]]
[,red!70,alias=b1[,red!70,edge label={node[below=1ex,red arrow]{}}[[,alias=b2][]][,red!70,edge label={node[above=1ex,red arrow]{}}]][[][[][,alias=b3]]]]
[~~$\dots$~,scale=2,no edge,fill=none,yshift=-4em]
[,red!70,alias=c1[[,alias=c2][]][,red!70,edge label={node[above=1ex,red arrow]{}}[,red!70,edge label={node[above=1ex,red arrow]{}}[,alias=c3][,red!70,edge label={node[above=1ex,red arrow]{}}]][,alias=c4]]]]
]
\node[tree box, fit=(a1)(a2)(a3)](t1){};
\node[tree box, fit=(b1)(b2)(b3)](t2){};
\node[tree box, fit=(c1)(c2)(c3)(c4)](tn){};
\node[below right=0.5em, inner sep=0pt] at (t1.north west) {Tree 1};
\node[below right=0.5em, inner sep=0pt] at (t2.north west) {Tree 2};
\node[below right=0.5em, inner sep=0pt] at (tn.north west) {Tree $n$};
\path (t1.south west)--(tn.south east) node[midway,below=4em, node box] (mean) {mean in regression or majority vote in classification};
\node[below=3em of mean, node box] (pred) {prediction};
\draw[black arrow={5mm}{4mm}] (bagging) -- (t1.north);
\draw[black arrow] (bagging) -- (t2.north);
\draw[black arrow={5mm}{4mm}] (bagging) -- (tn.north);
\draw[black arrow={5mm}{5mm}] (t1.south) -- (mean);
\draw[black arrow] (t2.south) -- (mean);
\draw[black arrow={5mm}{5mm}] (tn.south) -- (mean);
\draw[black arrow] (mean) -- (pred);
\end{forest}
\end{document}
답변1
다음을 수행해야 합니다.
- 사용
fit
. - 적절한 노드를 추가합니다.
- 보다여기.
- 노드를 직접 추가합니다.
\documentclass[tikz]{standalone}
\usetikzlibrary{fit,shapes.arrows,positioning}
\usepackage{forest}
\tikzset{marrow/.style={midway,red,sloped,fill, minimum height=3cm, single arrow, single arrow
head extend=.5cm, single arrow head indent=.25cm,xscale=0.3,yscale=0.15,
allow upside down}}
\begin{document}
\begin{forest}
for tree={l sep=3em, s sep=3em, anchor=center, inner sep=0.7em, fill=blue!50,
circle, font=\Large\sffamily,where level=1{no edge}{}}
[Training Data, draw, rectangle, rounded corners, orange, text=white,alias=TD
[,red!70,alias=a1[[,alias=a2][]][,red!70,edge label={node[above=1ex,marrow]{}}[[][]][,red!70,edge label={node[above=1ex,marrow]{}}[,red!70,edge label={node[below=1ex,marrow]{}}][,alias=a3]]]]
[,red!70,alias=b1[,red!70,edge label={node[below=1ex,marrow]{}}[[,alias=b2][]][,red!70,edge label={node[above=1ex,marrow]{}}]][[][[][,alias=b3]]]]
[~$\cdots$~,scale=4,no edge,fill=none,yshift=-1em]
[,red!70,alias=c1[[,alias=c2][]][,red!70,edge label={node[above=1ex,marrow]{}}[,red!70,edge label={node[above=1ex,marrow]{}}[,alias=c3][,red!70,edge label={node[above=1ex,marrow]{}}]][,alias=c4]]]
]
\node[draw,fit=(a1)(a2)(a3)](f1){};
\node[draw,fit=(b1)(b2)(b3)](f2){};
\node[draw,fit=(c1)(c2)(c3)(c4)](f3){};
\path (f1.south west)--(f3.south east) node[midway,below=4em] (David) {mean};
\node[below=2em of David] (pred){prediction};
\foreach \X in {1,2,3}{\draw[-stealth] (TD) -- (f\X.north);
\draw[-stealth] (f\X.south) -- (David);}
\draw[-stealth] (David) -- (pred);
\end{forest}
\end{document}