2017-01-07 4 views
1

rbenchmarkパッケージベンチマークアルゴリズムを学習しており、R環境でのパフォーマンスを確認しています。しかし、入力を増やすと、ベンチマークの結果は互いに変化します。線グラフや曲線を生成するために、異なる入力に対するアルゴリズムの性能がどのように必要であるかを示す。私は、異なる数の入力を使用することのパフォーマンスの違いを示す1つの線または曲線を持つことを期待しています。私が使ったアルゴリズムは、O(n^2)です。結果のプロットでは、X軸に入力の観測数が表示されます。Y軸にそれぞれ実行時間が表示されます。ggplo2を使用すると、よりエレガントにこれを行うことができますか?誰も私に希望のプロットを生成するいくつかのアイデアを与えることができますかどんな考えですか?どのようにしてベンチマークの出力をプロットできますか?

foo.csv 
bar.csv 
cat.csv 

私は、入力として2つのCSVファイルを使用したベンチマーク結果:

df_2 <- data.frame(
    test=c("s3","s7","s4" ,"s1" ,"s2" ,"s5" ,"s6" ,"s9","s8"), 
    replications=c(10,10, 10, 10 ,10 ,10 ,10 ,10 ,10), 
    elapsed=c(0.23, 0.28, 0.53 , 0.80 , 4.12 , 8.57 , 8.81 ,20.16 ,24.53), 
    relative=c(1.000 , 1.217 , 2.304 , 3.478 , 17.913 , 37.261 , 38.304 , 87.652 ,106.652), 
    user.self=c(0.23, 0.28 , 0.53 , 0.61 , 4.13 , 8.55 , 8.80 ,18.06 ,19.08), 
    sys.self=c(0.00, 0.00 ,0.00, 0.00 ,0.00, 0.00 ,0.00 ,0.13, 0.51) 
) 

私は、入力として3つのCSVファイルを使用し、この時間:

これらは入力ファイルである、のは、想像してみましょう

df_3 <- data.frame(
    test=c("s3", "s7" ,"s4", "s1", "s5", "s6","s2", "s9","s8"), 
    replications=c(10,10, 10, 10 ,10 ,10 ,10 ,10 ,10), 
    elapsed=c(0.34 , 0.47 , 0.70 , 2.41 ,8.26 , 8.75 , 9.03, 28.78 ,36.56), 
    relative=c(1.000 , 1.382 , 2.059 , 7.088 , 24.294 , 25.735 , 26.559 ,84.647 ,107.529), 
    user.self=c(0.34 , 0.46 ,0.70 , 1.72 , 8.26 , 8.74 ,9.01, 26.24 ,30.95), 
    sys.self=c(0.00 ,0.00 ,0.00, 0.12, 0.00 ,0.00 ,0.00, 0.12 ,0.77) 
) 

希望するプロットでは、2つの線のプロットまたは曲線を1つのグリッドに配置する必要があります。

上記のベンチマーク結果を使用して素敵な線グラフまたは曲線を得るにはどうすればよいですか?どのようにしてRのアルゴリズムの性能を示す所望のプロットを達成することができますか?ありがとうございます

答えて

2

あなたは(あなたがdf_3に対する結果df_2で、比較したいことを、おそらく異なるnで、s1, s2, s3, ...が異なるテストを表すと仮定して)これを試すことができます。

library(reshape2) 
df_2 <- melt(df_2, id='test') 
df_3 <- melt(df_3, id='test') 
df_2$num_input <- 'two_input' 
df_3$num_input <- 'three_input' 
df <- rbind(df_2, df_3) 
library(ggplot2) 
ggplot(df, aes(test, value, group=num_input, col=num_input)) + geom_point() + geom_line() + facet_wrap(~variable) 

enter image description here

yoあなたがより読みやすい画像をしたい場合は、この試す

ggplot(df[df$variable=='elapsed',], aes(test, value, group=num_input, col=num_input)) + geom_point() + geom_line(lwd=2) + ylab('elapsed') + 
    theme(text=element_text(size=15)) 

enter image description here

:uはこれを試してみてくださいtestに対してelapsedをプロットしたい

ggplot(df, aes(test, value, group=num_input, col=num_input)) + geom_point() + geom_line(lwd=2) + facet_wrap(~variable) + 
    theme(text=element_text(size=15)) 

enter image description here

を[EDITED] geom_smooth

01私は `test`に対して` elapsed`ためのプロットを持っているつもりなら

enter image description here

+0

親愛なるsandipan、あなたの出力プロット上について、私はそれをどのように何ができるのでしょうか?折れ線グラフをよりスムーズにし、見やすい線を簡単に見えるようにする機会はありますか?ありがとうございました – Dan

+0

@Danあなたの要件に応じて更新 –

+0

あなたの出力に基づいて曲線プロットを得るつもりなら、私はそれを行うことができますか?私はラインプロットを他と比較することに興味があります。さらに、 'geom_smooth()'を使ってプロットをスムーズにしようとしましたが、このように使い方が間違っているようです。何か案が ? – Dan

1

まず、グループ化変数を作成します。

次に、レプリケーション数の変数を作成します。

df_2$n <- 1:length(df_2$replications) 
df_3$n <- 1:length(df_2$replications) 

我々は、単一のデータフレームを作成、行によってdf_2df_3結合プロット。

これで線グラフが作成されます。

ggplot(rbind(df_2, df_3)) + 
    aes(as.factor(n), elapsed, color = set, group = set) + 
    geom_line() 

line plot

これはその方法として黄土を用いて、滑らかなラインプロットを作成します。

ggplot(rbind(df_2, df_3)) + 
    aes(as.factor(n), elapsed, color = set, group = set) + 
    geom_smooth(alpha = 0) 

smooth plot

関連する問題