text:
### A Pluto.jl notebook ###
# v0.19.4

using Markdown
using InteractiveUtils

# ╔═╡ c39dc109-88dc-415c-b423-28ad99f6305d
begin
	using CSV
	using DataFrames
	using ScikitLearn
	using Statistics
	using Random
	using CairoMakie
	using StatsBase
end

# ╔═╡ c0cb1d26-5f49-4c4f-a5bc-31636dd91e3c
using Conda

# ╔═╡ a1f24b10-2141-47b6-84c4-a09cd9f16b50
using ScikitLearn.CrossValidation: train_test_split

# ╔═╡ 97cf5c61-ee3c-49b3-a333-bcec3fcd20df
using DataWrangler

# ╔═╡ b06b801f-be75-422a-9787-857d88276d20
using XGBoost

# ╔═╡ e16d817a-d1d6-11ec-3393-db311583ad16
md"# ガラスの分類
[ここを解く、【練習問題】ガラスの分類](https://signate.jp/competitions/125)

[データのソース](https://archive.ics.uci.edu/ml/datasets/Glass+Identification)

[kaggleのここが参考できそう](https://www.kaggle.com/code/eliekawerk/glass-type-classification-with-machine-learning)
"

# ╔═╡ 0b57167d-8306-41d3-97b0-c3df7e84d96c
md"##### ライブラリのロード"

# ╔═╡ ddbba5c8-e69e-4742-b709-f4a3c2c8d9ce
md"""
| カラム | ヘッダ名称  | データ型 | 説明                |
|-------|-----------|---------|--------------------|
| 0	    | id	    | int     | インデックスとして使用 |
| 1	    | RI	    | float	  | 屈折率              |
| 2	    | Na	    | float	  | ナトリウム※1         |
| 3	    | Mg	    | float	  | マグネシウム※1       |
| 4	    | Al	    | float	  | アルミニウム※1       |
| 5	    | Si	    | float	  | シリコン※1          |
| 6	    | K	        | float	  | ポタシウム※1         |
| 7	    | Ca	    | float	  | カルシウム※1         |
| 8	    | Ba	    | float	  | バリウム※1          |
| 9	    | Fe	    | float	  | 鉄※1               |
|10	    | Type      |int      | ガラスの種類※2       |

※1: カラム2～9は「酸素に対する質量パーセント」

※2: (1=building_windows_float_processed, 2=building_windows_non_float_processed, 3=vehicle_windows_float_processed,5=containers, 6=tableware, 7=headlamps）※4は無し

**カラム10のTypeが目的変数**
"""

# ╔═╡ 064b7e11-3452-4e6d-8301-86b44802ea73
md"##### データの理解"

# ╔═╡ 6960b6ef-ceec-4e8a-8afb-5c7c51d50b50
begin
	train = CSV.read("./train.tsv", DataFrame)
	rename!(train ,Dict(:Column1 => "id"))
	features_index = 2:10
end;

# ╔═╡ 8c10abf4-92b0-428f-b8bd-2273ba333e74
describe(train)

# ╔═╡ ae4e405c-f18f-44f1-bee2-3a35350665e9
combine( groupby(train, :Type),  nrow => :count)

# ╔═╡ ef70fa5e-e01a-4f10-8916-33b1062476b2
md"タイプ1、2が多いので、データセットのバランスがちょっと良くない。"

# ╔═╡ e1f1f957-37c6-4444-b3f1-d854e20d076e
function distplot(df, features_index, color)
	xlabel = names(df)[features_index]

	fig = Figure(backgroundcolor=:gray95, resolution=(750, 700))
	grid = fig[1,1] = GridLayout()
	axes = [Axis(grid[i, j]) for i in 1:3, j in 1:3]

	for i in 1:length(axes)
		axes[i].ylabel = "Count"
		axes[i].xlabel = xlabel[i]

		label = skewness(df[:,features_index[i]]) |> x -> round(x, digits=3) |> string
		hist!(axes[i], df[:,features_index[i]],
				bins=30, normalization=:none, color=(color,0.6), label=label)
		axislegend(axes[i])
	end
	for i in 1:3, j in 1:3
	  	colgap!(grid, 10)
	 	rowgap!(grid, 10)
	end

	fig
end

# ╔═╡ ae785846-5200-4335-833b-3ba5a42b5292
distplot(train, features_index, :blue)

# ╔═╡ afaa1a9c-4167-4f42-8e73-04889639cb20
md"　どの特徴量も正規分布していない。特徴量Fe, Ba, Ca, Kは、最も高い歪度（わいど、skewness は、分布の非対称性を示す指標)を示している。さらに、カリウム (K) とバリウム (Ba) の分布は、多くのはずれ値を含んでいるようです。外れ値を含む測定値の指標を、[Tukey's method](http://datapigtechnologies.com/blog/index.php/highlighting-outliers-in-your-data-with-the-tukey-method/) [テューキーの範囲検定](https://ja.wikipedia.org/wiki/%E3%83%86%E3%83%A5%E3%83%BC%E3%82%AD%E3%83%BC%E3%81%AE%E7%AF%84%E5%9B%B2%E6%A4%9C%E5%AE%9A)を用いて同定してみましょう。"

# ╔═╡ dce77031-e140-4475-948a-746bb1ce3a9e
let
	cc = :Al
	fig = Figure(backgroundcolor=:gray95, resolution=(750, 700))
	grid = fig[1,1] = GridLayout()
	ax = Axis(grid[1, 1])

	hist!(ax, train[:,cc], bins=25)

	Q1 = train[:,cc] |> x -> percentile(x, 25)
	Q3 = train[:,cc] |> x -> percentile(x, 75)

	# Interquartile range(IQR)
	IQR = Q3 - Q1

	outlier_step = 1.5 * iqr(train[:,cc])
	# outlier_step = 1.5 * IQR

	Q1_r = Q1 - outlier_step
	Q3_r = Q3 + outlier_step

	vlines!(ax, Q1_r, color=:red, linewidth=2)
	vlines!(ax, Q3_r, color=:red, linewidth=2)

	fig
end

# ╔═╡ 46e0cf0b-e62b-4bf1-bb89-1091b2daeae4
# 複数の異常値を持つ観測値を検出する関数
function outlier_hunt(df)
	"""
    特徴量のデータフレーム df を受け取り，2個以上の外れ値を含む観測値に対応する
	インデックスのリストを返す。
    """
	outlier_indices = []

	for col in features_index
		outlier_list_col = []

		# 1st quarile (25%)
		Q1 = percentile(df[:,col], 25)
		# 3rd quarile (75%)
		Q3 = percentile(df[:,col], 75)
		# Interquartile range(IQR)
		# IQR = Q3 - Q1

		# outlier step
		outlier_step = 1.5 * iqr(df[:,col])
		# Determine a list of indices of outliers for feature col
		for i in 1:size(train)[1]
			judge_Q1 = (df[i,col] < Q1 - outlier_step)
			judge_Q3 = (df[i,col] > Q3 + outlier_step)

			if judge_Q1 || judge_Q3
				push!(outlier_list_col, i)
			end
		end

		push!(outlier_indices, outlier_list_col)
	end

	return outlier_indices
end

# ╔═╡ 681d12b8-f07b-4c58-a6c9-39a633a744c7
begin
	outier_num = length(outlier_hunt(train))
	println("The dataset contains $(outier_num) observations with more than 2 outliers")
end

# ╔═╡ 59b6cc8f-bc79-4920-9a9a-f80761b7d6bc
md"　ああ！複数の外れ値を持つ $(outier_num) 個のオブザベーションが存在します。これらは、我々の学習アルゴリズムの効率に害を与える可能性があります。我々は、次のセクションでこれらを取り除くことを確実にします。

いくつかの分布の箱ひげ図を調べてみましょう。
"

# ╔═╡ 1136f2a5-8a9b-4236-aaa9-6e07b32e2d5f
let
	fig = Figure(backgroundcolor=:gray95, resolution=(750, 700))
	grid = fig[1,1] = GridLayout()
	axes = Axis(grid[1, 1])

	axes.xlabel = "元素"
	axes.ylabel = "酸素に対する質量パーセント [%]"
	axes.xticks = (features_index, names(train)[features_index])
	axes.yticks = (0:10:80)

	for i in features_index
		boxplot!(fill(i, length(train[:,i])), train[:,i])
	end
	fig
end

# ╔═╡ 4b0387bb-09f2-4044-9ed5-7e8159d5e10c
md"　当然のことながら、前項で見たように、シリコンは他の成分よりはるかに優れた意味を持っています。まあ、ガラスはシリカが主成分ですから、当たり前といえば当たり前なのですが。

それでは、pairplotを描いて特徴量の相関を視覚的に検証してみましょう。
"

# ╔═╡ 7419369f-b442-4c5a-877e-6a6a5432da60
function pairplot(df, gdf_index)
	gdf = select(df, gdf_index) |> x -> groupby(x, gdf_index[end])
	colors = [:blue, :orange, :green, :cyan, :purple, :pink, :brown]
	material = names(gdf)[1:end-1]
	alpha = 0.7
	dim = size(material)[1]
	types = sort(unique(df.Type)) .|> string
	type_num = length(types)

	fig = Figure(backgroundcolor=:gray95, resolution=(1200, 900), markersize=8)
	grid = fig[1,1] = GridLayout()
	axes = [Axis(grid[i, j]) for i in 1:dim, j in 1:dim]

	# 軸の幅
	for j in 1:dim
		linkxaxes!(axes[1,j], axes[2:dim,j])
		linkxaxes!(axes[1,j], axes[2:dim,j])
		linkxaxes!(axes[1,j], axes[2:dim,j])
		linkxaxes!(axes[1,j], axes[2:dim,j])
	end

	for i in 1:dim, j in 1:dim

		# x軸とy軸のラベル
		if i == j
		 	axes[i,j].ylabel="カウント"
		else
			axes[i,j].ylabel=material[i]
		end
		if i == 4
			axes[i,j].xlabel = material[j]
		end

		# プロット
		# 密度分布
		if i == j
			for k in 1:type_num
				density!(axes[i,j], (gdf[k])[:,i], color=(colors[k], alpha),
					label=types[k])
			end
		# 散布図
		else
			for k in 1:type_num
				scatter!(axes[i,j], (gdf[k])[:,j], (gdf[k])[:,i],
					color=(colors[k], alpha))
			end
		end
	end

	fig[1,2] = Legend(fig, axes[1,1])

	for i in 1:dim-1, j in 1:dim
	  	colgap!(grid, 10)
	 	rowgap!(grid, 10)
	 	hidexdecorations!(axes[i,j], grid=false)
	end
	fig
end

# ╔═╡ b39bc203-00ec-4e23-96ed-61c7c2be3dee
pairplot(train, [:Na, :Mg, :Al, :Si, :Type])

# ╔═╡ d031cfdf-2803-4dcb-88df-59e28e4ea8e0
pairplot(train, [:K, :Ca, :Ba, :Fe, :Type])

# ╔═╡ d99d64c6-5a66-4593-9065-bbe89d53f029
md"それでは、相関関係をヒートマップで検証してみましょう。"

# ╔═╡ 40be2cdc-9443-4005-85f2-cecc5decdf24
corr_matrix = train[:, features_index] |> Matrix |> x -> cor(x, dims=1)

# ╔═╡ 8ea2ed04-fcf3-4ba1-9554-7fb11fa62fad
md"[カラーマップの参考](https://docs.juliaplots.org/latest/generated/colorschemes/)"

# ╔═╡ e05e3434-5cc2-43be-b027-4fcf52c1659d
begin
	fig = Figure(backgroundcolor=:gray95, resolution=(700, 700))
	ax, hm = heatmap(fig[1,1], corr_matrix, colormap=(:coolwarm, 0.8),
		axis = (aspect=DataAspect(), yreversed=true))

	ax.xticks = (features_index.-1, names(train)[features_index])
	ax.yticks = (features_index.-1, names(train)[features_index])

	row, col = size(corr_matrix)
	for i in 1:row, j in 1:col
		ann = string(round(corr_matrix[i,j], digits=2))
		text!(ax, ann, position = (i, j), align = (:center, :center), textsize=12)
	end

	cb = Colorbar(fig[1,2], hm, ticks=-1.0:0.2:1.0)
	cb.limits = (-1.0, 1.0)

	fig
end

# ╔═╡ 01dc9f2e-6ed9-4ef2-8531-5934dd134469
md"　**RIとCaの間には強い正の相関があるようだ。**これは、主成分分析により、入力された特徴の一部を相関させるためのヒントとなる可能性がある。"

# ╔═╡ c89439fa-d4ff-4c40-b3ef-f9e3c63c7a17
md"## データの準備"

# ╔═╡ fd21b9fb-91bc-4510-a545-a6b5730ae1ae
md"### データ洗浄"

# ╔═╡ e51d9829-7327-4e16-99fd-09eb287ee572
describe(train)

# ╔═╡ 639c7eea-8e60-4a7e-a0e5-90fae355e666
md"このデータセットはクリーンで、欠損値もありません。"

# ╔═╡ 0fb0dd27-6de6-4700-874a-7342b02d7e3c
md"#### 多重外れ値を探し削除する。
前節で作成した関数で、複数の外れ値を含む測定値を除去してみましょう。"

# ╔═╡ 542914c5-87d2-4dff-bf9a-017f58ee51aa
outlier_indices_r = [3, 6, 11, 21, 59, 67, 78, 83, 97]

# ╔═╡ b34b3023-3b9e-4bea-b97b-201565158604
# ╠═╡ show_logs = false
# ╠═╡ disabled = true
#=╠═╡
for i in 1:length(outlier_indices)

	multiple_outliers = []
	println("----- $(i) -----")
	for j in 1:length(outlier_indices)-1
		if i ≠ j
			temp = outlier_indices[i] ∩ outlier_indices[j]
#			println(temp)
			if length(temp) ≠ 0
				push!(multiple_outliers, temp)
			end
		end
	end
	# println("-------------")

	for k in 1:length(multiple_outliers)
		for m in 1:length(multiple_outliers)-1
			temp2 = multiple_outliers[k] ∩ multiple_outliers[m]
			println(temp2)
		end
	end

	println(length(multiple_outliers))
end
  ╠═╡ =#

# ╔═╡ f1e81c3f-30ac-4461-8e61-63293cf6f9d1
train2 = deepcopy(train)

# ╔═╡ 8da56caf-8da3-4d34-a595-004066c60ef7
deleteat!(train2, outlier_indices_r)

# ╔═╡ a682661f-7e86-4c7f-9d44-b64259619745
size(train2)

# ╔═╡ 3a7be2e3-1b90-48e6-aa67-1b4d23db1b9c
distplot(train2, features_index, :blue)

# ╔═╡ 926ac5f0-ab29-4cc4-ac72-64270272da05
count2 = combine( groupby(train2, :Type),  nrow => :count)

# ╔═╡ 7ee63fe0-c963-451c-9f12-2c12946b9fd1
let
	fig = Figure(backgroundcolor=:gray95, resolution=(750, 700))
	grid = fig[1,1] = GridLayout()
	axes = Axis(grid[1, 1])

	axes.xlabel = "Type"
	axes.ylabel = "Count"
	axes.xticks = (1:7)
	axes.yticks = (0:10:50)

	barplot!(axes, count2[:,1], count2[:,2], color=:blue)

	fig
end

# ╔═╡ ce2c02e9-840e-4bc4-89ac-f71cbd57b865
md"### Split-out validation dataset"

# ╔═╡ c13a19ad-724e-4c69-a63d-7ffe79a44a38
Conda.runconda(`install mlxtend -c conda-forge -y`)

# ╔═╡ 7e347cfa-0981-46cb-b29d-08477edd2fe8
begin
	X = train2[:,features_index] |> Matrix
	y = train2[:, :Type]
	seed = 7
	test_size = 0.2
	X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=test_size, random_state=seed)
end

# ╔═╡ c23328aa-011a-4eda-919f-c9d5b240b493
md"　Box-Cox変換がいくつかの特徴の正規化に貢献できるかどうかを検証してみましょう。強調すべきは、データの詮索を避けるために、すべての変換はトレーニングセットに対してのみ行われるべきであるということです。さもなければ、テスト誤差の推定に偏りが生じます。"

# ╔═╡ 56c90b44-f42f-44ed-9d24-6516fcc11e28
size(train2)

# ╔═╡ 373e4ae0-b80b-4951-b3bc-e37aeb948f1b
begin
	features_boxcox = []

	for feature in collect(features_index)
		bc_transformed = boxcox(train2[:,feature].+1)
		push!(features_boxcox, bc_transformed[:x])
	end
	features_boxcox = hcat(features_boxcox...)
	train_bc = DataFrame(features_boxcox, :auto)
	rename!(train_bc, names(train2[:,features_index]))
	train_bc.Type = train2[:, :Type]
end

# ╔═╡ 2a544c3a-dd1b-499b-9721-481bddea478e
describe(train_bc)

# ╔═╡ b2152e1a-1006-4f8a-af16-71628d3078f9
distplot(train2, features_index, :blue)

# ╔═╡ 48f32f3a-a33d-4298-ad38-4b6c48a3ad9b
distplot(train_bc, 1:9, :red)

# ╔═╡ edf595e7-1e74-4b87-b1cb-efd491c19a82
# 歪度がBox-cox変換後にゼロに近づいたか確認
begin
	name = names(train_bc)
	for i in features_index

		before_bc = train2[:,i] |> skewness
		after_bc  = train_bc[:,i-1] |> skewness
		δ = abs( after_bc / before_bc)

		if δ < 1.0
			println("Feature $(name[i-1]) is less skewed after a Box-Cox transform")
		else
			println("Feature $(name[i-1]) is more skewed after a Box-Cox transform")
		end
	end
end

# ╔═╡ 4cb7a0f7-e52e-4904-9cbf-da19fcc533a0
md"　Box-Cox変換は、特徴量の異なる分布の歪みを減らすのに良い働きをするようだ。しかし、特徴量分布の正規化にはつながりません。試行錯誤の結果、使用したアルゴリズムの性能向上にはつながらないことがわかりました。次に、次元削減の手法を検討します。"

# ╔═╡ fd8019c8-d1bc-43c4-b1ce-efc981547752
md"### アルゴリズムの評価
#### 次元削減
##### XGBoost → AdaBoost"

# ╔═╡ e7725cb4-2d20-4b1c-be4e-8890f99f7d45
bst = xgboost(X_train, 2, label=y_train, eta=1, max_depth=2)

# ╔═╡ cfc979ba-fc94-4628-ba87-4ce4514b3b1f
@sk_import metrics: (accuracy_score, confusion_matrix)

# ╔═╡ 725b50dc-250e-4105-8eed-8bcf5fdb8fe9
md"それでは、特徴量に対してPCAを行い、線形依存性のあるものを非相関化し、累積説明分散をプロットしてみましょう。"

# ╔═╡ 24ae74a1-4d84-49ff-a82c-bfbe7bdc1c32
@sk_import decomposition : PCA

# ╔═╡ 1798e6c2-1ad6-477c-b639-c93efd95e2c6
function pca_plot(X_train)
	pca = PCA(random_state=1)
	pca.fit(X_train)
	var_exp = pca.explained_variance_ratio_
	cum_var_exp = cumsum(var_exp)

	fig = Figure(backgroundcolor=:gray95, resolution=(900, 700))
	grid = fig[1,1] = GridLayout()
	ax1 = Axis(grid[1, 1])

	ax1.xlabel = "Principal components"
	ax1.ylabel = "Explained variance ratio"
	ax1.xticks = 1:9
	ax1.yticks = 0.0:0.2:1.0

	barplot!(ax1, 1:length(cum_var_exp), var_exp, color=(:blue, 0.7))

	stairs!(ax1, 1:length(cum_var_exp), cum_var_exp, color=:red)

	fig

end

# ╔═╡ 45d619d0-9523-4975-b06b-e230de7a2b41
pca_plot(X_train)

# ╔═╡ c5148ca9-6e21-4cc0-a68f-af9137bc8afc
md"最初の5つの主成分で分散の約99%を説明できるようである。しかし、PCAの特徴を学習アルゴリズムに与えても、性能向上には寄与しなかった。これは、PCAが捉えることのできない非線形性に起因している可能性があります。
"

# ╔═╡ 444ac01f-8de3-4a32-aaba-1b0306eb7fc3
md"### アルゴリズムの比較
　さて、いよいよ様々な機械学習アルゴリズムのパフォーマンスを比較する時が来ました。10倍クロスバリデーションを用いて、分類精度を指標に各モデルの性能を評価します。データの漏洩を防ぐため、StandarizationとPCAを含むパイプラインが使用されています。木ベースの手法では、Standarizationは行われない。
"

# ╔═╡ 56b40c57-5147-4467-8390-bd4724868d28
begin
	@sk_import preprocessing: StandardScaler
	@sk_import svm : SVC
	@sk_import neighbors : KNeighborsClassifier
	@sk_import ensemble : RandomForestClassifier
	@sk_import ensemble : AdaBoostClassifier
	@sk_import ensemble : ExtraTreesClassifier
	@sk_import ensemble : GradientBoostingClassifier
	@sk_import linear_model : LogisticRegression
end

# ╔═╡ a3a921df-8e12-4d8f-826a-8e132d694108
begin
	# using ScikitLearn.CrossValidation: cross_val_score
	@sk_import model_selection : cross_val_score
	@sk_import model_selection : StratifiedKFold
end

# ╔═╡ d2330c32-8c6e-4068-9972-ee0dcfab4da6
begin
	sc = StandardScaler()
	sc.fit(X_train)
	X_train_std = sc.transform(X_train)
	X_test_std = sc.transform(X_test)
end

# ╔═╡ 4568ac71-b1c6-4a17-90c1-d6cdacd7f732
begin
	n_components = 5
	n_estimators = 200
	svc = SVC(kernel="rbf", C=0.1)
	knn = KNeighborsClassifier()
	rf = RandomForestClassifier(random_state=1, n_estimators=n_estimators)
	ada = AdaBoostClassifier(random_state=1, n_estimators=n_estimators)
	et = ExtraTreesClassifier(random_state=1, n_estimators=n_estimators)
	gb = GradientBoostingClassifier(random_state=1)
	lr = LogisticRegression(random_state=1)
end

# ╔═╡ d0a55dc8-d109-4204-9e72-83c4556969d5
md"##### SVM(Support Vector Machine)の結果"

# ╔═╡ 4b61499c-fc35-4af5-b47a-d0f6a1932abb
# パラメータの設定
begin
	num_folds = 10
	scoring = "accuracy"
	kfold = StratifiedKFold(n_splits=num_folds, random_state=1)
end

# ╔═╡ 4f1ebb9b-d098-4dca-9d55-56fc5e73c360
cv_results = cross_val_score(svc, X_train_std, y_train, cv=kfold, scoring=scoring)

# ╔═╡ e2576b89-b2fe-44bc-8cca-e61cab632f10
function calc_cv(model, X_train, y_train)

	cv_results = cross_val_score(model, X_train_std, y_train, cv=kfold, scoring=scoring)
	cv_mean100 = 100*mean(cv_results)
	cv_std100 = 100*std(cv_results)

	msg = "$(model): " * "$(cv_mean100) (+/- $(cv_std100))"
	println("$msg")
end

# ╔═╡ b7de9176-73c3-4d76-9ddf-9eaad352b5ce
for model in [svc, knn, rf, ada, et, gb, lr]
	calc_cv(model, X_train_std, y_train)
end

# ╔═╡ e9fa8c39-617a-463e-9e90-0e5e06ea1947
md"**観測**：最高のパフォーマンスはRFで達成される。しかし、RFでは分布が広くなってしまう。今後、RFのチューニングを行い、研究を継続する価値がある。
"

# ╔═╡ af024a64-98cf-4308-afc3-4d194832f830
md"### アルゴリズムのチューニング
　ランダムフォレストでは、成長する木の数（*n_estimators*）、木の深さ（*max_depth*）、分割の基準（*gini or entropy*）などを調整することができます。早速、これらのチューニングを始めてみましょう。
"

# ╔═╡ 51e2357d-bf61-406a-9acc-4989c1621464
function rfc_tuning(n_estimator, max_depth, X_train, y_train)
	num_folds = 10
	scoring = "accuracy"
	kfold = StratifiedKFold(n_splits=num_folds, random_state=1)
	rf = RandomForestClassifier(random_state=1, n_estimators=n_estimator, max_depth=max_depth, )
	cv_results = cross_val_score(rf, X_train_std, y_train, cv=kfold, scoring=scoring)

	cv_mean100 = 100*mean(cv_results)
	cv_std100 = 100*std(cv_results)

	msg = "$(rf): " * "$(cv_mean100) (+/- $(cv_std100))"
	println("$msg")
end

# ╔═╡ 93345720-7e3b-4465-a1ca-a7084e9de575
rfc_tuning(100, 5, X_train_std, y_train)

# ╔═╡ 7bb4c7e9-b72f-4b99-8224-4e342d8889d4
rfc_tuning(200, 5, X_train_std, y_train)

# ╔═╡ 800d54ad-a60e-4dae-b351-1795ed65d050
rfc_tuning(300, 5, X_train_std, y_train)

# ╔═╡ d2bcefcd-5cc5-4a8e-8dba-d7a9817c3616
rfc_tuning(400, 5, X_train_std, y_train)

# ╔═╡ 988ed586-3f13-4cf7-bd74-2a45b687f356
rfc_tuning(500, nothing, X_train_std, y_train)

# ╔═╡ 75581257-1b58-4db9-a8fe-2fb551e8b0a5
rfc_tuning(500, 5, X_train_std, y_train)

# ╔═╡ e8761b55-7df3-4f32-98be-42d6a6a83bff
rfc_tuning(600, 5, X_train_std, y_train)

# ╔═╡ 703b4539-1f1c-4b83-9a30-18184df6769c
md"##### 木の数(n_estimator)は500がよさそう。"

# ╔═╡ 1dfe0ba1-d8b1-428c-8053-1c3738402107
md"#### *n_estimator=500* のランダムフォレストでtestの確率を見積もる"

# ╔═╡ 44be6af0-ffa4-40cb-8d8e-8f58020a4cbe
begin
	rfout = RandomForestClassifier(random_state=1, n_estimators=500, max_depth=nothing, max_features=0.05, min_samples_split=0.005)
	rfout.fit(X_train_std, y_train)
	y_pred = rfout.predict(X_test_std)
	acc = accuracy_score(y_test, y_pred) |> x -> round(x, digits=4)
end

# ╔═╡ e3a1b6d2-0a89-4078-be33-b9d2a700b920
md"#### 提出用テストデータの読み込み"

# ╔═╡ a37e04ef-b17e-4bbb-bf9d-fb5b122a6840
begin
	test_out = CSV.read("./test.tsv", DataFrame)
	rename!(test_out ,Dict(:Column1 => "id"))
	X_test_out = Matrix(test_out[:, 2:end])
	X_test_out_std = sc.transform(X_test_out)
end

# ╔═╡ b1632b5f-f2a2-40b2-986a-2da969d7ddde
begin
	results = rfout.predict_proba(X_test_out_std)
	predict_result = mapslices(argmax, results, dims=2)
	for i in 1:length(predict_result)
	 	if predict_result[i] ≥ 4
	 		predict_result[i] += 1
		end
	end
	output = hcat(test_out[:,1], predict_result) |> x -> DataFrame(x, :auto)
	CSV.write("./output_rf_fine.csv", output, writeheader=false)
end

# ╔═╡ 7e0f1deb-c61f-49c0-aede-c04d31c3207d

# ╔═╡ 5178bced-3a2e-4732-be4a-a5dbbbed6f22

# ╔═╡ 51d2528b-ae9a-46a3-884f-f7d90f90a341

# ╔═╡ 97a71e16-7e27-4e23-96dd-8c2d3a839d98

# ╔═╡ 0ae450e3-6436-41f5-9f43-7fa366f97de7

# ╔═╡ e70e6737-168e-4e68-9292-055f924460ee

# ╔═╡ c295464b-434e-45b1-8ffb-595212baac50

# ╔═╡ c9563f10-5a5b-48ed-ae91-e05873184a22

# ╔═╡ 00000000-0000-0000-0000-000000000001
PLUTO_PROJECT_TOML_CONTENTS = """
[deps]
CSV = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b"
CairoMakie = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0"
Conda = "8f4d0f93-b110-5947-807f-2305c1781a2d"
DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"
DataWrangler = "a7a6b7e4-f56f-4e7a-9983-6838d7ccc3b8"
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
ScikitLearn = "3646fa90-6ef7-5e7e-9f22-8aca16db6324"
Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
StatsBase = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91"
XGBoost = "009559a3-9522-5dbb-924b-0b6ed2b22bb9"

[compat]
CSV = "~0.10.4"
CairoMakie = "~0.8.1"
Conda = "~1.7.0"
DataFrames = "~1.3.4"
DataWrangler = "~0.1.0"
ScikitLearn = "~0.6.4"
StatsBase = "~0.33.16"
XGBoost = "~1.5.2"
"""

# ╔═╡ 00000000-0000-0000-0000-000000000002
PLUTO_MANIFEST_TOML_CONTENTS = """
# This file is machine-generated - editing it directly is not advised

julia_version = "1.7.2"
manifest_format = "2.0"

[[deps.AbstractFFTs]]
deps = ["ChainRulesCore", "LinearAlgebra"]
git-tree-sha1 = "6f1d9bc1c08f9f4a8fa92e3ea3cb50153a1b40d4"
uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c"
version = "1.1.0"

[[deps.AbstractTrees]]
git-tree-sha1 = "03e0550477d86222521d254b741d470ba17ea0b5"
uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c"
version = "0.3.4"

[[deps.Adapt]]
deps = ["LinearAlgebra"]
git-tree-sha1 = "af92965fb30777147966f58acb05da51c5616b5f"
uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e"
version = "3.3.3"

[[deps.Animations]]
deps = ["Colors"]
git-tree-sha1 = "e81c509d2c8e49592413bfb0bb3b08150056c79d"
uuid = "27a7e980-b3e6-11e9-2bcd-0b925532e340"
version = "0.4.1"

[[deps.ArgTools]]
uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f"

[[deps.ArrayInterface]]
deps = ["Compat", "IfElse", "LinearAlgebra", "Requires", "SparseArrays", "Static"]
git-tree-sha1 = "81f0cb60dc994ca17f68d9fb7c942a5ae70d9ee4"
uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9"
version = "5.0.8"

[[deps.Artifacts]]
uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33"

[[deps.Automa]]
deps = ["Printf", "ScanByte", "TranscodingStreams"]
git-tree-sha1 = "d50976f217489ce799e366d9561d56a98a30d7fe"
uuid = "67c07d97-cdcb-5c2c-af73-a7f9c32a568b"
version = "0.8.2"

[[deps.AxisAlgorithms]]
deps = ["LinearAlgebra", "Random", "SparseArrays", "WoodburyMatrices"]
git-tree-sha1 = "66771c8d21c8ff5e3a93379480a2307ac36863f7"
uuid = "13072b0f-2c55-5437-9ae7-d433b7a33950"
version = "1.0.1"

[[deps.Base64]]
uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f"

[[deps.Bzip2_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "19a35467a82e236ff51bc17a3a44b69ef35185a2"
uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0"
version = "1.0.8+0"

[[deps.CEnum]]
git-tree-sha1 = "eb4cb44a499229b3b8426dcfb5dd85333951ff90"
uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82"
version = "0.4.2"

[[deps.CSV]]
deps = ["CodecZlib", "Dates", "FilePathsBase", "InlineStrings", "Mmap", "Parsers", "PooledArrays", "SentinelArrays", "Tables", "Unicode", "WeakRefStrings"]
git-tree-sha1 = "873fb188a4b9d76549b81465b1f75c82aaf59238"
uuid = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b"
version = "0.10.4"

[[deps.Cairo]]
deps = ["Cairo_jll", "Colors", "Glib_jll", "Graphics", "Libdl", "Pango_jll"]
git-tree-sha1 = "d0b3f8b4ad16cb0a2988c6788646a5e6a17b6b1b"
uuid = "159f3aea-2a34-519c-b102-8c37f9878175"
version = "1.0.5"

[[deps.CairoMakie]]
deps = ["Base64", "Cairo", "Colors", "FFTW", "FileIO", "FreeType", "GeometryBasics", "LinearAlgebra", "Makie", "SHA"]
git-tree-sha1 = "9f71c7c0d154e256006eb91661f14dd8f1622c2e"
uuid = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0"
version = "0.8.1"

[[deps.Cairo_jll]]
deps = ["Artifacts", "Bzip2_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"]
git-tree-sha1 = "4b859a208b2397a7a623a03449e4636bdb17bcf2"
uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a"
version = "1.16.1+1"

[[deps.Calculus]]
deps = ["LinearAlgebra"]
git-tree-sha1 = "f641eb0a4f00c343bbc32346e1217b86f3ce9dad"
uuid = "49dc2e85-a5d0-5ad3-a950-438e2897f1b9"
version = "0.5.1"

[[deps.ChainRulesCore]]
deps = ["Compat", "LinearAlgebra", "SparseArrays"]
git-tree-sha1 = "9950387274246d08af38f6eef8cb5480862a435f"
uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
version = "1.14.0"

[[deps.ChangesOfVariables]]
deps = ["ChainRulesCore", "LinearAlgebra", "Test"]
git-tree-sha1 = "1e315e3f4b0b7ce40feded39c73049692126cf53"
uuid = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0"
version = "0.1.3"

[[deps.CodecZlib]]
deps = ["TranscodingStreams", "Zlib_jll"]
git-tree-sha1 = "ded953804d019afa9a3f98981d99b33e3db7b6da"
uuid = "944b1d66-785c-5afd-91f1-9de20f533193"
version = "0.7.0"

[[deps.ColorBrewer]]
deps = ["Colors", "JSON", "Test"]
git-tree-sha1 = "61c5334f33d91e570e1d0c3eb5465835242582c4"
uuid = "a2cac450-b92f-5266-8821-25eda20663c8"
version = "0.4.0"

[[deps.ColorSchemes]]
deps = ["ColorTypes", "ColorVectorSpace", "Colors", "FixedPointNumbers", "Random"]
git-tree-sha1 = "7297381ccb5df764549818d9a7d57e45f1057d30"
uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4"
version = "3.18.0"

[[deps.ColorTypes]]
deps = ["FixedPointNumbers", "Random"]
git-tree-sha1 = "63d1e802de0c4882c00aee5cb16f9dd4d6d7c59c"
uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f"
version = "0.11.1"

[[deps.ColorVectorSpace]]
deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "SpecialFunctions", "Statistics", "TensorCore"]
git-tree-sha1 = "3f1f500312161f1ae067abe07d13b40f78f32e07"
uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4"
version = "0.9.8"

[[deps.Colors]]
deps = ["ColorTypes", "FixedPointNumbers", "Reexport"]
git-tree-sha1 = "417b0ed7b8b838aa6ca0a87aadf1bb9eb111ce40"
uuid = "5ae59095-9a9b-59fe-a467-6f913c188581"
version = "0.12.8"

[[deps.CommonSubexpressions]]
deps = ["MacroTools", "Test"]
git-tree-sha1 = "7b8a93dba8af7e3b42fecabf646260105ac373f7"
uuid = "bbf7d656-a473-5ed7-a52c-81e309532950"
version = "0.3.0"

[[deps.Compat]]
deps = ["Base64", "Dates", "DelimitedFiles", "Distributed", "InteractiveUtils", "LibGit2", "Libdl", "LinearAlgebra", "Markdown", "Mmap", "Pkg", "Printf", "REPL", "Random", "SHA", "Serialization", "SharedArrays", "Sockets", "SparseArrays", "Statistics", "Test", "UUIDs", "Unicode"]
git-tree-sha1 = "b153278a25dd42c65abbf4e62344f9d22e59191b"
uuid = "34da2185-b29b-5c13-b0c7-acf172513d20"
version = "3.43.0"

[[deps.CompilerSupportLibraries_jll]]
deps = ["Artifacts", "Libdl"]
uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae"

[[deps.Conda]]
deps = ["Downloads", "JSON", "VersionParsing"]
git-tree-sha1 = "6e47d11ea2776bc5627421d59cdcc1296c058071"
uuid = "8f4d0f93-b110-5947-807f-2305c1781a2d"
version = "1.7.0"

[[deps.Contour]]
deps = ["StaticArrays"]
git-tree-sha1 = "9f02045d934dc030edad45944ea80dbd1f0ebea7"
uuid = "d38c429a-6771-53c6-b99e-75d170b6e991"
version = "0.5.7"

[[deps.Crayons]]
git-tree-sha1 = "249fe38abf76d48563e2f4556bebd215aa317e15"
uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f"
version = "4.1.1"

[[deps.DataAPI]]
git-tree-sha1 = "fb5f5316dd3fd4c5e7c30a24d50643b73e37cd40"
uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a"
version = "1.10.0"

[[deps.DataFrames]]
deps = ["Compat", "DataAPI", "Future", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "Markdown", "Missings", "PooledArrays", "PrettyTables", "Printf", "REPL", "Reexport", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"]
git-tree-sha1 = "daa21eb85147f72e41f6352a57fccea377e310a9"
uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"
version = "1.3.4"

[[deps.DataStructures]]
deps = ["Compat", "InteractiveUtils", "OrderedCollections"]
git-tree-sha1 = "cc1a8e22627f33c789ab60b36a9132ac050bbf75"
uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8"
version = "0.18.12"

[[deps.DataValueInterfaces]]
git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6"
uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464"
version = "1.0.0"

[[deps.DataWrangler]]
deps = ["FFTW", "Optim", "Smoothers", "Statistics"]
git-tree-sha1 = "828bad42fa744db972eddb3b5ce797db093183bf"
uuid = "a7a6b7e4-f56f-4e7a-9983-6838d7ccc3b8"
version = "0.1.0"

[[deps.Dates]]
deps = ["Printf"]
uuid = "ade2ca70-3891-5945-98fb-dc099432e06a"

[[deps.DelimitedFiles]]
deps = ["Mmap"]
uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab"

[[deps.DensityInterface]]
deps = ["InverseFunctions", "Test"]
git-tree-sha1 = "80c3e8639e3353e5d2912fb3a1916b8455e2494b"
uuid = "b429d917-457f-4dbc-8f4c-0cc954292b1d"
version = "0.4.0"

[[deps.Dierckx]]
deps = ["Dierckx_jll"]
git-tree-sha1 = "633c119fcfddf61fb4c75d77ce3ebab552a44723"
uuid = "39dd38d3-220a-591b-8e3c-4c3a8c710a94"
version = "0.5.2"

[[deps.Dierckx_jll]]
deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "6596b96fe1caff3db36415eeb6e9d3b50bfe40ee"
uuid = "cd4c43a9-7502-52ba-aa6d-59fb2a88580b"
version = "0.1.0+0"

[[deps.DiffResults]]
deps = ["StaticArrays"]
git-tree-sha1 = "c18e98cba888c6c25d1c3b048e4b3380ca956805"
uuid = "163ba53b-c6d8-5494-b064-1a9d43ac40c5"
version = "1.0.3"

[[deps.DiffRules]]
deps = ["IrrationalConstants", "LogExpFunctions", "NaNMath", "Random", "SpecialFunctions"]
git-tree-sha1 = "28d605d9a0ac17118fe2c5e9ce0fbb76c3ceb120"
uuid = "b552c78f-8df3-52c6-915a-8e097449b14b"
version = "1.11.0"

[[deps.Distributed]]
deps = ["Random", "Serialization", "Sockets"]
uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b"

[[deps.Distributions]]
deps = ["ChainRulesCore", "DensityInterface", "FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SparseArrays", "SpecialFunctions", "Statistics", "StatsBase", "StatsFuns", "Test"]
git-tree-sha1 = "8a6b49396a4058771c5c072239b2e0a76e2e898c"
uuid = "31c24e10-a181-5473-b8eb-7969acd0382f"
version = "0.25.58"

[[deps.DocStringExtensions]]
deps = ["LibGit2"]
git-tree-sha1 = "b19534d1895d702889b219c382a6e18010797f0b"
uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae"
version = "0.8.6"

[[deps.Downloads]]
deps = ["ArgTools", "LibCURL", "NetworkOptions"]
uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6"

[[deps.DualNumbers]]
deps = ["Calculus", "NaNMath", "SpecialFunctions"]
git-tree-sha1 = "5837a837389fccf076445fce071c8ddaea35a566"
uuid = "fa6b7ba4-c1ee-5f82-b5fc-ecf0adba8f74"
version = "0.6.8"

[[deps.EarCut_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "3f3a2501fa7236e9b911e0f7a588c657e822bb6d"
uuid = "5ae413db-bbd1-5e63-b57d-d24a61df00f5"
version = "2.2.3+0"

[[deps.Expat_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "bad72f730e9e91c08d9427d5e8db95478a3c323d"
uuid = "2e619515-83b5-522b-bb60-26c02a35a201"
version = "2.4.8+0"

[[deps.FFMPEG]]
deps = ["FFMPEG_jll"]
git-tree-sha1 = "b57e3acbe22f8484b4b5ff66a7499717fe1a9cc8"
uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a"
version = "0.4.1"

[[deps.FFMPEG_jll]]
deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "LAME_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "Pkg", "Zlib_jll", "libass_jll", "libfdk_aac_jll", "libvorbis_jll", "x264_jll", "x265_jll"]
git-tree-sha1 = "d8a578692e3077ac998b50c0217dfd67f21d1e5f"
uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5"
version = "4.4.0+0"

[[deps.FFTW]]
deps = ["AbstractFFTs", "FFTW_jll", "LinearAlgebra", "MKL_jll", "Preferences", "Reexport"]
git-tree-sha1 = "505876577b5481e50d089c1c68899dfb6faebc62"
uuid = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341"
version = "1.4.6"

[[deps.FFTW_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "c6033cc3892d0ef5bb9cd29b7f2f0331ea5184ea"
uuid = "f5851436-0d7a-5f13-b9de-f02708fd171a"
version = "3.3.10+0"

[[deps.FileIO]]
deps = ["Pkg", "Requires", "UUIDs"]
git-tree-sha1 = "9267e5f50b0e12fdfd5a2455534345c4cf2c7f7a"
uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549"
version = "1.14.0"

[[deps.FilePathsBase]]
deps = ["Compat", "Dates", "Mmap", "Printf", "Test", "UUIDs"]
git-tree-sha1 = "129b104185df66e408edd6625d480b7f9e9823a0"
uuid = "48062228-2e41-5def-b9a4-89aafe57970f"
version = "0.9.18"

[[deps.FillArrays]]
deps = ["LinearAlgebra", "Random", "SparseArrays", "Statistics"]
git-tree-sha1 = "246621d23d1f43e3b9c368bf3b72b2331a27c286"
uuid = "1a297f60-69ca-5386-bcde-b61e274b549b"
version = "0.13.2"

[[deps.FiniteDiff]]
deps = ["ArrayInterface", "LinearAlgebra", "Requires", "SparseArrays", "StaticArrays"]
git-tree-sha1 = "51c8f36c81badaa0e9ec405dcbabaf345ed18c84"
uuid = "6a86dc24-6348-571c-b903-95158fe2bd41"
version = "2.11.1"

[[deps.FixedPointNumbers]]
deps = ["Statistics"]
git-tree-sha1 = "335bfdceacc84c5cdf16aadc768aa5ddfc5383cc"
uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93"
version = "0.8.4"

[[deps.Fontconfig_jll]]
deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Pkg", "Zlib_jll"]
git-tree-sha1 = "21efd19106a55620a188615da6d3d06cd7f6ee03"
uuid = "a3f928ae-7b40-5064-980b-68af3947d34b"
version = "2.13.93+0"

[[deps.Formatting]]
deps = ["Printf"]
git-tree-sha1 = "8339d61043228fdd3eb658d86c926cb282ae72a8"
uuid = "59287772-0a20-5a39-b81b-1366585eb4c0"
version = "0.4.2"

[[deps.ForwardDiff]]
deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions", "StaticArrays"]
git-tree-sha1 = "89cc49bf5819f0a10a7a3c38885e7c7ee048de57"
uuid = "f6369f11-7733-5829-9624-2563aa707210"
version = "0.10.29"

[[deps.FreeType]]
deps = ["CEnum", "FreeType2_jll"]
git-tree-sha1 = "cabd77ab6a6fdff49bfd24af2ebe76e6e018a2b4"
uuid = "b38be410-82b0-50bf-ab77-7b57e271db43"
version = "4.0.0"

[[deps.FreeType2_jll]]
deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"]
git-tree-sha1 = "87eb71354d8ec1a96d4a7636bd57a7347dde3ef9"
uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7"
version = "2.10.4+0"

[[deps.FreeTypeAbstraction]]
deps = ["ColorVectorSpace", "Colors", "FreeType", "GeometryBasics"]
git-tree-sha1 = "b5c7fe9cea653443736d264b85466bad8c574f4a"
uuid = "663a7486-cb36-511b-a19d-713bb74d65c9"
version = "0.9.9"

[[deps.FriBidi_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "aa31987c2ba8704e23c6c8ba8a4f769d5d7e4f91"
uuid = "559328eb-81f9-559d-9380-de523a88c83c"
version = "1.0.10+0"

[[deps.Future]]
deps = ["Random"]
uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820"

[[deps.GeometryBasics]]
deps = ["EarCut_jll", "IterTools", "LinearAlgebra", "StaticArrays", "StructArrays", "Tables"]
git-tree-sha1 = "83ea630384a13fc4f002b77690bc0afeb4255ac9"
uuid = "5c1252a2-5f33-56bf-86c9-59e7332b4326"
version = "0.4.2"

[[deps.Gettext_jll]]
deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "XML2_jll"]
git-tree-sha1 = "9b02998aba7bf074d14de89f9d37ca24a1a0b046"
uuid = "78b55507-aeef-58d4-861c-77aaff3498b1"
version = "0.21.0+0"

[[deps.Glib_jll]]
deps = ["Artifacts", "Gettext_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE_jll", "Pkg", "Zlib_jll"]
git-tree-sha1 = "a32d672ac2c967f3deb8a81d828afc739c838a06"
uuid = "7746bdde-850d-59dc-9ae8-88ece973131d"
version = "2.68.3+2"

[[deps.Graphics]]
deps = ["Colors", "LinearAlgebra", "NaNMath"]
git-tree-sha1 = "1c5a84319923bea76fa145d49e93aa4394c73fc2"
uuid = "a2bd30eb-e257-5431-a919-1863eab51364"
version = "1.1.1"

[[deps.Graphite2_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "344bf40dcab1073aca04aa0df4fb092f920e4011"
uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472"
version = "1.3.14+0"

[[deps.GridLayoutBase]]
deps = ["GeometryBasics", "InteractiveUtils", "Observables"]
git-tree-sha1 = "e7b3493c3e64d072a9f22c4b24bc51874a3edcdf"
uuid = "3955a311-db13-416c-9275-1d80ed98e5e9"
version = "0.7.5"

[[deps.Grisu]]
git-tree-sha1 = "53bb909d1151e57e2484c3d1b53e19552b887fb2"
uuid = "42e2da0e-8278-4e71-bc24-59509adca0fe"
version = "1.0.2"

[[deps.HarfBuzz_jll]]
deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg"]
git-tree-sha1 = "129acf094d168394e80ee1dc4bc06ec835e510a3"
uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566"
version = "2.8.1+1"

[[deps.HypergeometricFunctions]]
deps = ["DualNumbers", "LinearAlgebra", "SpecialFunctions", "Test"]
git-tree-sha1 = "cb7099a0109939f16a4d3b572ba8396b1f6c7c31"
uuid = "34004b35-14d8-5ef3-9330-4cdb6864b03a"
version = "0.3.10"

[[deps.IfElse]]
git-tree-sha1 = "debdd00ffef04665ccbb3e150747a77560e8fad1"
uuid = "615f187c-cbe4-4ef1-ba3b-2fcf58d6d173"
version = "0.1.1"

[[deps.ImageCore]]
deps = ["AbstractFFTs", "ColorVectorSpace", "Colors", "FixedPointNumbers", "Graphics", "MappedArrays", "MosaicViews", "OffsetArrays", "PaddedViews", "Reexport"]
git-tree-sha1 = "9a5c62f231e5bba35695a20988fc7cd6de7eeb5a"
uuid = "a09fc81d-aa75-5fe9-8630-4744c3626534"
version = "0.9.3"

[[deps.ImageIO]]
deps = ["FileIO", "IndirectArrays", "JpegTurbo", "Netpbm", "OpenEXR", "PNGFiles", "QOI", "Sixel", "TiffImages", "UUIDs"]
git-tree-sha1 = "539682309e12265fbe75de8d83560c307af975bd"
uuid = "82e4d734-157c-48bb-816b-45c225c6df19"
version = "0.6.2"

[[deps.Imath_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "87f7662e03a649cffa2e05bf19c303e168732d3e"
uuid = "905a6f67-0a94-5f89-b386-d35d92009cd1"
version = "3.1.2+0"

[[deps.IndirectArrays]]
git-tree-sha1 = "012e604e1c7458645cb8b436f8fba789a51b257f"
uuid = "9b13fd28-a010-5f03-acff-a1bbcff69959"
version = "1.0.0"

[[deps.Inflate]]
git-tree-sha1 = "f5fc07d4e706b84f72d54eedcc1c13d92fb0871c"
uuid = "d25df0c9-e2be-5dd7-82c8-3ad0b3e990b9"
version = "0.1.2"

[[deps.InlineStrings]]
deps = ["Parsers"]
git-tree-sha1 = "61feba885fac3a407465726d0c330b3055df897f"
uuid = "842dd82b-1e85-43dc-bf29-5d0ee9dffc48"
version = "1.1.2"

[[deps.IntelOpenMP_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "d979e54b71da82f3a65b62553da4fc3d18c9004c"
uuid = "1d5cc7b8-4909-519e-a0f8-d0f5ad9712d0"
version = "2018.0.3+2"

[[deps.InteractiveUtils]]
deps = ["Markdown"]
uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240"

[[deps.Interpolations]]
deps = ["AxisAlgorithms", "ChainRulesCore", "LinearAlgebra", "OffsetArrays", "Random", "Ratios", "Requires", "SharedArrays", "SparseArrays", "StaticArrays", "WoodburyMatrices"]
git-tree-sha1 = "b7bc05649af456efc75d178846f47006c2c4c3c7"
uuid = "a98d9a8b-a2ab-59e6-89dd-64a1c18fca59"
version = "0.13.6"

[[deps.IntervalSets]]
deps = ["Dates", "Statistics"]
git-tree-sha1 = "ad841eddfb05f6d9be0bff1fa48dcae32f134a2d"
uuid = "8197267c-284f-5f27-9208-e0e47529a953"
version = "0.6.2"

[[deps.InverseFunctions]]
deps = ["Test"]
git-tree-sha1 = "336cc738f03e069ef2cac55a104eb823455dca75"
uuid = "3587e190-3f89-42d0-90ee-14403ec27112"
version = "0.1.4"

[[deps.InvertedIndices]]
git-tree-sha1 = "bee5f1ef5bf65df56bdd2e40447590b272a5471f"
uuid = "41ab1584-1d38-5bbf-9106-f11c6c58b48f"
version = "1.1.0"

[[deps.IrrationalConstants]]
git-tree-sha1 = "7fd44fd4ff43fc60815f8e764c0f352b83c49151"
uuid = "92d709cd-6900-40b7-9082-c6be49f344b6"
version = "0.1.1"

[[deps.Isoband]]
deps = ["isoband_jll"]
git-tree-sha1 = "f9b6d97355599074dc867318950adaa6f9946137"
uuid = "f1662d9f-8043-43de-a69a-05efc1cc6ff4"
version = "0.1.1"

[[deps.IterTools]]
git-tree-sha1 = "fa6287a4469f5e048d763df38279ee729fbd44e5"
uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e"
version = "1.4.0"

[[deps.IteratorInterfaceExtensions]]
git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856"
uuid = "82899510-4779-5014-852e-03e436cf321d"
version = "1.0.0"

[[deps.JLLWrappers]]
deps = ["Preferences"]
git-tree-sha1 = "abc9885a7ca2052a736a600f7fa66209f96506e1"
uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210"
version = "1.4.1"

[[deps.JSON]]
deps = ["Dates", "Mmap", "Parsers", "Unicode"]
git-tree-sha1 = "3c837543ddb02250ef42f4738347454f95079d4e"
uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6"
version = "0.21.3"

[[deps.JpegTurbo]]
deps = ["CEnum", "FileIO", "ImageCore", "JpegTurbo_jll", "TOML"]
git-tree-sha1 = "a77b273f1ddec645d1b7c4fd5fb98c8f90ad10a5"
uuid = "b835a17e-a41a-41e7-81f0-2f016b05efe0"
version = "0.1.1"

[[deps.JpegTurbo_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "b53380851c6e6664204efb2e62cd24fa5c47e4ba"
uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8"
version = "2.1.2+0"

[[deps.KernelDensity]]
deps = ["Distributions", "DocStringExtensions", "FFTW", "Interpolations", "StatsBase"]
git-tree-sha1 = "591e8dc09ad18386189610acafb970032c519707"
uuid = "5ab0869b-81aa-558d-bb23-cbf5423bbe9b"
version = "0.6.3"

[[deps.LAME_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "f6250b16881adf048549549fba48b1161acdac8c"
uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d"
version = "3.100.1+0"

[[deps.LZO_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "e5b909bcf985c5e2605737d2ce278ed791b89be6"
uuid = "dd4b983a-f0e5-5f8d-a1b7-129d4a5fb1ac"
version = "2.10.1+0"

[[deps.LaTeXStrings]]
git-tree-sha1 = "f2355693d6778a178ade15952b7ac47a4ff97996"
uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f"
version = "1.3.0"

[[deps.LazyArtifacts]]
deps = ["Artifacts", "Pkg"]
uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3"

[[deps.LibCURL]]
deps = ["LibCURL_jll", "MozillaCACerts_jll"]
uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21"

[[deps.LibCURL_jll]]
deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"]
uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0"

[[deps.LibGit2]]
deps = ["Base64", "NetworkOptions", "Printf", "SHA"]
uuid = "76f85450-5226-5b5a-8eaa-529ad045b433"

[[deps.LibSSH2_jll]]
deps = ["Artifacts", "Libdl", "MbedTLS_jll"]
uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8"

[[deps.Libdl]]
uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb"

[[deps.Libffi_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "0b4a5d71f3e5200a7dff793393e09dfc2d874290"
uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490"
version = "3.2.2+1"

[[deps.Libgcrypt_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgpg_error_jll", "Pkg"]
git-tree-sha1 = "64613c82a59c120435c067c2b809fc61cf5166ae"
uuid = "d4300ac3-e22c-5743-9152-c294e39db1e4"
version = "1.8.7+0"

[[deps.Libgpg_error_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "c333716e46366857753e273ce6a69ee0945a6db9"
uuid = "7add5ba3-2f88-524e-9cd5-f83b8a55f7b8"
version = "1.42.0+0"

[[deps.Libiconv_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "42b62845d70a619f063a7da093d995ec8e15e778"
uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531"
version = "1.16.1+1"

[[deps.Libmount_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "9c30530bf0effd46e15e0fdcf2b8636e78cbbd73"
uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9"
version = "2.35.0+0"

[[deps.Libuuid_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "7f3efec06033682db852f8b3bc3c1d2b0a0ab066"
uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700"
version = "2.36.0+0"

[[deps.LineSearches]]
deps = ["LinearAlgebra", "NLSolversBase", "NaNMath", "Parameters", "Printf"]
git-tree-sha1 = "f27132e551e959b3667d8c93eae90973225032dd"
uuid = "d3d80556-e9d4-5f37-9878-2ab0fcc64255"
version = "7.1.1"

[[deps.LinearAlgebra]]
deps = ["Libdl", "libblastrampoline_jll"]
uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"

[[deps.LogExpFunctions]]
deps = ["ChainRulesCore", "ChangesOfVariables", "DocStringExtensions", "InverseFunctions", "IrrationalConstants", "LinearAlgebra"]
git-tree-sha1 = "09e4b894ce6a976c354a69041a04748180d43637"
uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688"
version = "0.3.15"

[[deps.Logging]]
uuid = "56ddb016-857b-54e1-b83d-db4d58db5568"

[[deps.MKL_jll]]
deps = ["Artifacts", "IntelOpenMP_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "Pkg"]
git-tree-sha1 = "e595b205efd49508358f7dc670a940c790204629"
uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7"
version = "2022.0.0+0"

[[deps.MacroTools]]
deps = ["Markdown", "Random"]
git-tree-sha1 = "3d3e902b31198a27340d0bf00d6ac452866021cf"
uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09"
version = "0.5.9"

[[deps.Makie]]
deps = ["Animations", "Base64", "ColorBrewer", "ColorSchemes", "ColorTypes", "Colors", "Contour", "Distributions", "DocStringExtensions", "FFMPEG", "FileIO", "FixedPointNumbers", "Formatting", "FreeType", "FreeTypeAbstraction", "GeometryBasics", "GridLayoutBase", "ImageIO", "IntervalSets", "Isoband", "KernelDensity", "LaTeXStrings", "LinearAlgebra", "MakieCore", "Markdown", "Match", "MathTeXEngine", "Observables", "OffsetArrays", "Packing", "PlotUtils", "PolygonOps", "Printf", "Random", "RelocatableFolders", "Serialization", "Showoff", "SignedDistanceFields", "SparseArrays", "Statistics", "StatsBase", "StatsFuns", "StructArrays", "UnicodeFun"]
git-tree-sha1 = "0762d8af469c1666d7a979f85bc23c861f2d7be6"
uuid = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a"
version = "0.17.1"

[[deps.MakieCore]]
deps = ["Observables"]
git-tree-sha1 = "cd999cfcda9ae0dd564a968087005d25359344c9"
uuid = "20f20a25-4f0e-4fdf-b5d1-57303727442b"
version = "0.3.1"

[[deps.MappedArrays]]
git-tree-sha1 = "e8b359ef06ec72e8c030463fe02efe5527ee5142"
uuid = "dbb5928d-eab1-5f90-85c2-b9b0edb7c900"
version = "0.4.1"

[[deps.Markdown]]
deps = ["Base64"]
uuid = "d6f4376e-aef5-505a-96c1-9c027394607a"

[[deps.Match]]
git-tree-sha1 = "1d9bc5c1a6e7ee24effb93f175c9342f9154d97f"
uuid = "7eb4fadd-790c-5f42-8a69-bfa0b872bfbf"
version = "1.2.0"

[[deps.MathTeXEngine]]
deps = ["AbstractTrees", "Automa", "DataStructures", "FreeTypeAbstraction", "GeometryBasics", "LaTeXStrings", "REPL", "RelocatableFolders", "Test"]
git-tree-sha1 = "70e733037bbf02d691e78f95171a1fa08cdc6332"
uuid = "0a4f8689-d25c-4efe-a92b-7142dfc1aa53"
version = "0.2.1"

[[deps.MbedTLS_jll]]
deps = ["Artifacts", "Libdl"]
uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1"

[[deps.Missings]]
deps = ["DataAPI"]
git-tree-sha1 = "bf210ce90b6c9eed32d25dbcae1ebc565df2687f"
uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28"
version = "1.0.2"

[[deps.Mmap]]
uuid = "a63ad114-7e13-5084-954f-fe012c677804"

[[deps.MosaicViews]]
deps = ["MappedArrays", "OffsetArrays", "PaddedViews", "StackViews"]
git-tree-sha1 = "b34e3bc3ca7c94914418637cb10cc4d1d80d877d"
uuid = "e94cdb99-869f-56ef-bcf0-1ae2bcbe0389"
version = "0.3.3"

[[deps.MozillaCACerts_jll]]
uuid = "14a3606d-f60d-562e-9121-12d972cd8159"

[[deps.NLSolversBase]]
deps = ["DiffResults", "Distributed", "FiniteDiff", "ForwardDiff"]
git-tree-sha1 = "50310f934e55e5ca3912fb941dec199b49ca9b68"
uuid = "d41bc354-129a-5804-8e4c-c37616107c6c"
version = "7.8.2"

[[deps.NaNMath]]
git-tree-sha1 = "b086b7ea07f8e38cf122f5016af580881ac914fe"
uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3"
version = "0.3.7"

[[deps.Netpbm]]
deps = ["FileIO", "ImageCore"]
git-tree-sha1 = "18efc06f6ec36a8b801b23f076e3c6ac7c3bf153"
uuid = "f09324ee-3d7c-5217-9330-fc30815ba969"
version = "1.0.2"

[[deps.NetworkOptions]]
uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908"

[[deps.Observables]]
git-tree-sha1 = "dfd8d34871bc3ad08cd16026c1828e271d554db9"
uuid = "510215fc-4207-5dde-b226-833fc4488ee2"
version = "0.5.1"

[[deps.OffsetArrays]]
deps = ["Adapt"]
git-tree-sha1 = "aee446d0b3d5764e35289762f6a18e8ea041a592"
uuid = "6fe1bfb0-de20-5000-8ca7-80f57d26f881"
version = "1.11.0"

[[deps.Ogg_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "887579a3eb005446d514ab7aeac5d1d027658b8f"
uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051"
version = "1.3.5+1"

[[deps.OpenBLAS_jll]]
deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"]
uuid = "4536629a-c528-5b80-bd46-f80d51c5b363"

[[deps.OpenEXR]]
deps = ["Colors", "FileIO", "OpenEXR_jll"]
git-tree-sha1 = "327f53360fdb54df7ecd01e96ef1983536d1e633"
uuid = "52e1d378-f018-4a11-a4be-720524705ac7"
version = "0.3.2"

[[deps.OpenEXR_jll]]
deps = ["Artifacts", "Imath_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"]
git-tree-sha1 = "923319661e9a22712f24596ce81c54fc0366f304"
uuid = "18a262bb-aa17-5467-a713-aee519bc75cb"
version = "3.1.1+0"

[[deps.OpenLibm_jll]]
deps = ["Artifacts", "Libdl"]
uuid = "05823500-19ac-5b8b-9628-191a04bc5112"

[[deps.OpenSSL_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "ab05aa4cc89736e95915b01e7279e61b1bfe33b8"
uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95"
version = "1.1.14+0"

[[deps.OpenSpecFun_jll]]
deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "13652491f6856acfd2db29360e1bbcd4565d04f1"
uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e"
version = "0.5.5+0"

[[deps.Optim]]
deps = ["Compat", "FillArrays", "ForwardDiff", "LineSearches", "LinearAlgebra", "NLSolversBase", "NaNMath", "Parameters", "PositiveFactorizations", "Printf", "SparseArrays", "StatsBase"]
git-tree-sha1 = "7a28efc8e34d5df89fc87343318b0a8add2c4021"
uuid = "429524aa-4258-5aef-a3af-852621145aeb"
version = "1.7.0"

[[deps.Opus_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "51a08fb14ec28da2ec7a927c4337e4332c2a4720"
uuid = "91d4177d-7536-5919-b921-800302f37372"
version = "1.3.2+0"

[[deps.OrderedCollections]]
git-tree-sha1 = "85f8e6578bf1f9ee0d11e7bb1b1456435479d47c"
uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d"
version = "1.4.1"

[[deps.PCRE_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "b2a7af664e098055a7529ad1a900ded962bca488"
uuid = "2f80f16e-611a-54ab-bc61-aa92de5b98fc"
version = "8.44.0+0"

[[deps.PDMats]]
deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"]
git-tree-sha1 = "027185efff6be268abbaf30cfd53ca9b59e3c857"
uuid = "90014a1f-27ba-587c-ab20-58faa44d9150"
version = "0.11.10"

[[deps.PNGFiles]]
deps = ["Base64", "CEnum", "ImageCore", "IndirectArrays", "OffsetArrays", "libpng_jll"]
git-tree-sha1 = "e925a64b8585aa9f4e3047b8d2cdc3f0e79fd4e4"
uuid = "f57f5aa1-a3ce-4bc8-8ab9-96f992907883"
version = "0.3.16"

[[deps.Packing]]
deps = ["GeometryBasics"]
git-tree-sha1 = "1155f6f937fa2b94104162f01fa400e192e4272f"
uuid = "19eb6ba3-879d-56ad-ad62-d5c202156566"
version = "0.4.2"

[[deps.PaddedViews]]
deps = ["OffsetArrays"]
git-tree-sha1 = "03a7a85b76381a3d04c7a1656039197e70eda03d"
uuid = "5432bcbf-9aad-5242-b902-cca2824c8663"
version = "0.5.11"

[[deps.Pango_jll]]
deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "FriBidi_jll", "Glib_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "3a121dfbba67c94a5bec9dde613c3d0cbcf3a12b"
uuid = "36c8627f-9965-5494-a995-c6b170f724f3"
version = "1.50.3+0"

[[deps.Parameters]]
deps = ["OrderedCollections", "UnPack"]
git-tree-sha1 = "34c0e9ad262e5f7fc75b10a9952ca7692cfc5fbe"
uuid = "d96e819e-fc66-5662-9728-84c9c7592b0a"
version = "0.12.3"

[[deps.Parsers]]
deps = ["Dates"]
git-tree-sha1 = "1285416549ccfcdf0c50d4997a94331e88d68413"
uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0"
version = "2.3.1"

[[deps.Pixman_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "b4f5d02549a10e20780a24fce72bea96b6329e29"
uuid = "30392449-352a-5448-841d-b1acce4e97dc"
version = "0.40.1+0"

[[deps.Pkg]]
deps = ["Artifacts", "Dates", "Downloads", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"]
uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f"

[[deps.PkgVersion]]
deps = ["Pkg"]
git-tree-sha1 = "a7a7e1a88853564e551e4eba8650f8c38df79b37"
uuid = "eebad327-c553-4316-9ea0-9fa01ccd7688"
version = "0.1.1"

[[deps.PlotUtils]]
deps = ["ColorSchemes", "Colors", "Dates", "Printf", "Random", "Reexport", "Statistics"]
git-tree-sha1 = "bb16469fd5224100e422f0b027d26c5a25de1200"
uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043"
version = "1.2.0"

[[deps.PolygonOps]]
git-tree-sha1 = "77b3d3605fc1cd0b42d95eba87dfcd2bf67d5ff6"
uuid = "647866c9-e3ac-4575-94e7-e3d426903924"
version = "0.1.2"

[[deps.PooledArrays]]
deps = ["DataAPI", "Future"]
git-tree-sha1 = "a6062fe4063cdafe78f4a0a81cfffb89721b30e7"
uuid = "2dfb63ee-cc39-5dd5-95bd-886bf059d720"
version = "1.4.2"

[[deps.PositiveFactorizations]]
deps = ["LinearAlgebra"]
git-tree-sha1 = "17275485f373e6673f7e7f97051f703ed5b15b20"
uuid = "85a6dd25-e78a-55b7-8502-1745935b8125"
version = "0.2.4"

[[deps.Preferences]]
deps = ["TOML"]
git-tree-sha1 = "47e5f437cc0e7ef2ce8406ce1e7e24d44915f88d"
uuid = "21216c6a-2e73-6563-6e65-726566657250"
version = "1.3.0"

[[deps.PrettyTables]]
deps = ["Crayons", "Formatting", "Markdown", "Reexport", "Tables"]
git-tree-sha1 = "dfb54c4e414caa595a1f2ed759b160f5a3ddcba5"
uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d"
version = "1.3.1"

[[deps.Printf]]
deps = ["Unicode"]
uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7"

[[deps.ProgressMeter]]
deps = ["Distributed", "Printf"]
git-tree-sha1 = "d7a7aef8f8f2d537104f170139553b14dfe39fe9"
uuid = "92933f4c-e287-5a05-a399-4b506db050ca"
version = "1.7.2"

[[deps.PyCall]]
deps = ["Conda", "Dates", "Libdl", "LinearAlgebra", "MacroTools", "Serialization", "VersionParsing"]
git-tree-sha1 = "1fc929f47d7c151c839c5fc1375929766fb8edcc"
uuid = "438e738f-606a-5dbb-bf0a-cddfbfd45ab0"
version = "1.93.1"

[[deps.QOI]]
deps = ["ColorTypes", "FileIO", "FixedPointNumbers"]
git-tree-sha1 = "18e8f4d1426e965c7b532ddd260599e1510d26ce"
uuid = "4b34888f-f399-49d4-9bb3-47ed5cae4e65"
version = "1.0.0"

[[deps.QuadGK]]
deps = ["DataStructures", "LinearAlgebra"]
git-tree-sha1 = "78aadffb3efd2155af139781b8a8df1ef279ea39"
uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc"
version = "2.4.2"

[[deps.REPL]]
deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"]
uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb"

[[deps.Random]]
deps = ["SHA", "Serialization"]
uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"

[[deps.Ratios]]
deps = ["Requires"]
git-tree-sha1 = "dc84268fe0e3335a62e315a3a7cf2afa7178a734"
uuid = "c84ed2f1-dad5-54f0-aa8e-dbefe2724439"
version = "0.4.3"

[[deps.Reexport]]
git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b"
uuid = "189a3867-3050-52da-a836-e630ba90ab69"
version = "1.2.2"

[[deps.RelocatableFolders]]
deps = ["SHA", "Scratch"]
git-tree-sha1 = "cdbd3b1338c72ce29d9584fdbe9e9b70eeb5adca"
uuid = "05181044-ff0b-4ac5-8273-598c1e38db00"
version = "0.1.3"

[[deps.Requires]]
deps = ["UUIDs"]
git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7"
uuid = "ae029012-a4dd-5104-9daa-d747884805df"
version = "1.3.0"

[[deps.Rmath]]
deps = ["Random", "Rmath_jll"]
git-tree-sha1 = "bf3188feca147ce108c76ad82c2792c57abe7b1f"
uuid = "79098fc4-a85e-5d69-aa6a-4863f24498fa"
version = "0.7.0"

[[deps.Rmath_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "68db32dff12bb6127bac73c209881191bf0efbb7"
uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f"
version = "0.3.0+0"

[[deps.SHA]]
uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce"

[[deps.SIMD]]
git-tree-sha1 = "7dbc15af7ed5f751a82bf3ed37757adf76c32402"
uuid = "fdea26ae-647d-5447-a871-4b548cad5224"
version = "3.4.1"

[[deps.ScanByte]]
deps = ["Libdl", "SIMD"]
git-tree-sha1 = "9cc2955f2a254b18be655a4ee70bc4031b2b189e"
uuid = "7b38b023-a4d7-4c5e-8d43-3f3097f304eb"
version = "0.3.0"

[[deps.ScikitLearn]]
deps = ["Compat", "Conda", "DataFrames", "Distributed", "IterTools", "LinearAlgebra", "MacroTools", "Parameters", "Printf", "PyCall", "Random", "ScikitLearnBase", "SparseArrays", "StatsBase", "VersionParsing"]
git-tree-sha1 = "ccb822ff4222fcf6ff43bbdbd7b80332690f168e"
uuid = "3646fa90-6ef7-5e7e-9f22-8aca16db6324"
version = "0.6.4"

[[deps.ScikitLearnBase]]
deps = ["LinearAlgebra", "Random", "Statistics"]
git-tree-sha1 = "7877e55c1523a4b336b433da39c8e8c08d2f221f"
uuid = "6e75b9c4-186b-50bd-896f-2d2496a4843e"
version = "0.5.0"

[[deps.Scratch]]
deps = ["Dates"]
git-tree-sha1 = "0b4b7f1393cff97c33891da2a0bf69c6ed241fda"
uuid = "6c6a2e73-6563-6170-7368-637461726353"
version = "1.1.0"

[[deps.SentinelArrays]]
deps = ["Dates", "Random"]
git-tree-sha1 = "6a2f7d70512d205ca8c7ee31bfa9f142fe74310c"
uuid = "91c51154-3ec4-41a3-a24f-3f23e20d615c"
version = "1.3.12"

[[deps.Serialization]]
uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b"

[[deps.SharedArrays]]
deps = ["Distributed", "Mmap", "Random", "Serialization"]
uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383"

[[deps.Showoff]]
deps = ["Dates", "Grisu"]
git-tree-sha1 = "91eddf657aca81df9ae6ceb20b959ae5653ad1de"
uuid = "992d4aef-0814-514b-bc4d-f2e9a6c4116f"
version = "1.0.3"

[[deps.SignedDistanceFields]]
deps = ["Random", "Statistics", "Test"]
git-tree-sha1 = "d263a08ec505853a5ff1c1ebde2070419e3f28e9"
uuid = "73760f76-fbc4-59ce-8f25-708e95d2df96"
version = "0.4.0"

[[deps.Sixel]]
deps = ["Dates", "FileIO", "ImageCore", "IndirectArrays", "OffsetArrays", "REPL", "libsixel_jll"]
git-tree-sha1 = "8fb59825be681d451c246a795117f317ecbcaa28"
uuid = "45858cf5-a6b0-47a3-bbea-62219f50df47"
version = "0.1.2"

[[deps.Smoothers]]
deps = ["Dierckx"]
git-tree-sha1 = "fab44b0ca72bc5e44606fa37762850e6952b3a3a"
uuid = "012d725f-b4dd-4916-8440-03955fc52575"
version = "0.1.3"

[[deps.Sockets]]
uuid = "6462fe0b-24de-5631-8697-dd941f90decc"

[[deps.SortingAlgorithms]]
deps = ["DataStructures"]
git-tree-sha1 = "b3363d7460f7d098ca0912c69b082f75625d7508"
uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c"
version = "1.0.1"

[[deps.SparseArrays]]
deps = ["LinearAlgebra", "Random"]
uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"

[[deps.SpecialFunctions]]
deps = ["ChainRulesCore", "IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"]
git-tree-sha1 = "5ba658aeecaaf96923dce0da9e703bd1fe7666f9"
uuid = "276daf66-3868-5448-9aa4-cd146d93841b"
version = "2.1.4"

[[deps.StackViews]]
deps = ["OffsetArrays"]
git-tree-sha1 = "46e589465204cd0c08b4bd97385e4fa79a0c770c"
uuid = "cae243ae-269e-4f55-b966-ac2d0dc13c15"
version = "0.1.1"

[[deps.Static]]
deps = ["IfElse"]
git-tree-sha1 = "5309da1cdef03e95b73cd3251ac3a39f887da53e"
uuid = "aedffcd0-7271-4cad-89d0-dc628f76c6d3"
version = "0.6.4"

[[deps.StaticArrays]]
deps = ["LinearAlgebra", "Random", "Statistics"]
git-tree-sha1 = "cd56bf18ed715e8b09f06ef8c6b781e6cdc49911"
uuid = "90137ffa-7385-5640-81b9-e52037218182"
version = "1.4.4"

[[deps.Statistics]]
deps = ["LinearAlgebra", "SparseArrays"]
uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"

[[deps.StatsAPI]]
deps = ["LinearAlgebra"]
git-tree-sha1 = "c82aaa13b44ea00134f8c9c89819477bd3986ecd"
uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0"
version = "1.3.0"

[[deps.StatsBase]]
deps = ["DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"]
git-tree-sha1 = "8977b17906b0a1cc74ab2e3a05faa16cf08a8291"
uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91"
version = "0.33.16"

[[deps.StatsFuns]]
deps = ["ChainRulesCore", "HypergeometricFunctions", "InverseFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"]
git-tree-sha1 = "5783b877201a82fc0014cbf381e7e6eb130473a4"
uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c"
version = "1.0.1"

[[deps.StructArrays]]
deps = ["Adapt", "DataAPI", "StaticArrays", "Tables"]
git-tree-sha1 = "e75d82493681dfd884a357952bbd7ab0608e1dc3"
uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a"
version = "0.6.7"

[[deps.SuiteSparse]]
deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"]
uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9"

[[deps.TOML]]
deps = ["Dates"]
uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76"

[[deps.TableTraits]]
deps = ["IteratorInterfaceExtensions"]
git-tree-sha1 = "c06b2f539df1c6efa794486abfb6ed2022561a39"
uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c"
version = "1.0.1"

[[deps.Tables]]
deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "OrderedCollections", "TableTraits", "Test"]
git-tree-sha1 = "5ce79ce186cc678bbb5c5681ca3379d1ddae11a1"
uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c"
version = "1.7.0"

[[deps.Tar]]
deps = ["ArgTools", "SHA"]
uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e"

[[deps.TensorCore]]
deps = ["LinearAlgebra"]
git-tree-sha1 = "1feb45f88d133a655e001435632f019a9a1bcdb6"
uuid = "62fd8b95-f654-4bbd-a8a5-9c27f68ccd50"
version = "0.1.1"

[[deps.Test]]
deps = ["InteractiveUtils", "Logging", "Random", "Serialization"]
uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40"

[[deps.TiffImages]]
deps = ["ColorTypes", "DataStructures", "DocStringExtensions", "FileIO", "FixedPointNumbers", "IndirectArrays", "Inflate", "OffsetArrays", "PkgVersion", "ProgressMeter", "UUIDs"]
git-tree-sha1 = "f90022b44b7bf97952756a6b6737d1a0024a3233"
uuid = "731e570b-9d59-4bfa-96dc-6df516fadf69"
version = "0.5.5"

[[deps.TranscodingStreams]]
deps = ["Random", "Test"]
git-tree-sha1 = "216b95ea110b5972db65aa90f88d8d89dcb8851c"
uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa"
version = "0.9.6"

[[deps.UUIDs]]
deps = ["Random", "SHA"]
uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4"

[[deps.UnPack]]
git-tree-sha1 = "387c1f73762231e86e0c9c5443ce3b4a0a9a0c2b"
uuid = "3a884ed6-31ef-47d7-9d2a-63182c4928ed"
version = "1.0.2"

[[deps.Unicode]]
uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5"

[[deps.UnicodeFun]]
deps = ["REPL"]
git-tree-sha1 = "53915e50200959667e78a92a418594b428dffddf"
uuid = "1cfade01-22cf-5700-b092-accc4b62d6e1"
version = "0.4.1"

[[deps.VersionParsing]]
git-tree-sha1 = "58d6e80b4ee071f5efd07fda82cb9fbe17200868"
uuid = "81def892-9a0e-5fdd-b105-ffc91e053289"
version = "1.3.0"

[[deps.WeakRefStrings]]
deps = ["DataAPI", "InlineStrings", "Parsers"]
git-tree-sha1 = "b1be2855ed9ed8eac54e5caff2afcdb442d52c23"
uuid = "ea10d353-3f73-51f8-a26c-33c1cb351aa5"
version = "1.4.2"

[[deps.WoodburyMatrices]]
deps = ["LinearAlgebra", "SparseArrays"]
git-tree-sha1 = "de67fa59e33ad156a590055375a30b23c40299d3"
uuid = "efce3f68-66dc-5838-9240-27a6d6f5f9b6"
version = "0.5.5"

[[deps.XGBoost]]
deps = ["Libdl", "Printf", "Random", "SparseArrays", "Statistics", "Test", "XGBoost_jll"]
git-tree-sha1 = "63685309857689d515395f7895a4d90b5942f716"
uuid = "009559a3-9522-5dbb-924b-0b6ed2b22bb9"
version = "1.5.2"

[[deps.XGBoost_jll]]
deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "af5a07debf4747d9fe906d74180d29015700a317"
uuid = "a5c6f535-4255-5ca2-a466-0e519f119c46"
version = "1.5.2+0"

[[deps.XML2_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "Zlib_jll"]
git-tree-sha1 = "1acf5bdf07aa0907e0a37d3718bb88d4b687b74a"
uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a"
version = "2.9.12+0"

[[deps.XSLT_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgcrypt_jll", "Libgpg_error_jll", "Libiconv_jll", "Pkg", "XML2_jll", "Zlib_jll"]
git-tree-sha1 = "91844873c4085240b95e795f692c4cec4d805f8a"
uuid = "aed1982a-8fda-507f-9586-7b0439959a61"
version = "1.1.34+0"

[[deps.Xorg_libX11_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxcb_jll", "Xorg_xtrans_jll"]
git-tree-sha1 = "5be649d550f3f4b95308bf0183b82e2582876527"
uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc"
version = "1.6.9+4"

[[deps.Xorg_libXau_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "4e490d5c960c314f33885790ed410ff3a94ce67e"
uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec"
version = "1.0.9+4"

[[deps.Xorg_libXdmcp_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "4fe47bd2247248125c428978740e18a681372dd4"
uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05"
version = "1.1.3+4"

[[deps.Xorg_libXext_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"]
git-tree-sha1 = "b7c0aa8c376b31e4852b360222848637f481f8c3"
uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3"
version = "1.3.4+4"

[[deps.Xorg_libXrender_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"]
git-tree-sha1 = "19560f30fd49f4d4efbe7002a1037f8c43d43b96"
uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa"
version = "0.9.10+4"

[[deps.Xorg_libpthread_stubs_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "6783737e45d3c59a4a4c4091f5f88cdcf0908cbb"
uuid = "14d82f49-176c-5ed1-bb49-ad3f5cbd8c74"
version = "0.1.0+3"

[[deps.Xorg_libxcb_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "XSLT_jll", "Xorg_libXau_jll", "Xorg_libXdmcp_jll", "Xorg_libpthread_stubs_jll"]
git-tree-sha1 = "daf17f441228e7a3833846cd048892861cff16d6"
uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b"
version = "1.13.0+3"

[[deps.Xorg_xtrans_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "79c31e7844f6ecf779705fbc12146eb190b7d845"
uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10"
version = "1.4.0+3"

[[deps.Zlib_jll]]
deps = ["Libdl"]
uuid = "83775a58-1f1d-513f-b197-d71354ab007a"

[[deps.isoband_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "51b5eeb3f98367157a7a12a1fb0aa5328946c03c"
uuid = "9a68df92-36a6-505f-a73e-abb412b6bfb4"
version = "0.2.3+0"

[[deps.libass_jll]]
deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"]
git-tree-sha1 = "5982a94fcba20f02f42ace44b9894ee2b140fe47"
uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0"
version = "0.15.1+0"

[[deps.libblastrampoline_jll]]
deps = ["Artifacts", "Libdl", "OpenBLAS_jll"]
uuid = "8e850b90-86db-534c-a0d3-1478176c7d93"

[[deps.libfdk_aac_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "daacc84a041563f965be61859a36e17c4e4fcd55"
uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280"
version = "2.0.2+0"

[[deps.libpng_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"]
git-tree-sha1 = "94d180a6d2b5e55e447e2d27a29ed04fe79eb30c"
uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f"
version = "1.6.38+0"

[[deps.libsixel_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "78736dab31ae7a53540a6b752efc61f77b304c5b"
uuid = "075b6546-f08a-558a-be8f-8157d0f608a5"
version = "1.8.6+1"

[[deps.libvorbis_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll", "Pkg"]
git-tree-sha1 = "b910cb81ef3fe6e78bf6acee440bda86fd6ae00c"
uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a"
version = "1.3.7+1"

[[deps.nghttp2_jll]]
deps = ["Artifacts", "Libdl"]
uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d"

[[deps.p7zip_jll]]
deps = ["Artifacts", "Libdl"]
uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0"

[[deps.x264_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "4fea590b89e6ec504593146bf8b988b2c00922b2"
uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a"
version = "2021.5.5+0"

[[deps.x265_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "ee567a171cce03570d77ad3a43e90218e38937a9"
uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76"
version = "3.5.0+0"
"""

# ╔═╡ Cell order:
# ╟─e16d817a-d1d6-11ec-3393-db311583ad16
# ╠═0b57167d-8306-41d3-97b0-c3df7e84d96c
# ╠═c39dc109-88dc-415c-b423-28ad99f6305d
# ╟─ddbba5c8-e69e-4742-b709-f4a3c2c8d9ce
# ╠═064b7e11-3452-4e6d-8301-86b44802ea73
# ╠═6960b6ef-ceec-4e8a-8afb-5c7c51d50b50
# ╠═8c10abf4-92b0-428f-b8bd-2273ba333e74
# ╠═ae4e405c-f18f-44f1-bee2-3a35350665e9
# ╟─ef70fa5e-e01a-4f10-8916-33b1062476b2
# ╠═e1f1f957-37c6-4444-b3f1-d854e20d076e
# ╠═ae785846-5200-4335-833b-3ba5a42b5292
# ╟─afaa1a9c-4167-4f42-8e73-04889639cb20
# ╠═dce77031-e140-4475-948a-746bb1ce3a9e
# ╟─46e0cf0b-e62b-4bf1-bb89-1091b2daeae4
# ╠═681d12b8-f07b-4c58-a6c9-39a633a744c7
# ╠═59b6cc8f-bc79-4920-9a9a-f80761b7d6bc
# ╠═1136f2a5-8a9b-4236-aaa9-6e07b32e2d5f
# ╟─4b0387bb-09f2-4044-9ed5-7e8159d5e10c
# ╟─7419369f-b442-4c5a-877e-6a6a5432da60
# ╠═b39bc203-00ec-4e23-96ed-61c7c2be3dee
# ╠═d031cfdf-2803-4dcb-88df-59e28e4ea8e0
# ╠═d99d64c6-5a66-4593-9065-bbe89d53f029
# ╠═40be2cdc-9443-4005-85f2-cecc5decdf24
# ╠═8ea2ed04-fcf3-4ba1-9554-7fb11fa62fad
# ╠═e05e3434-5cc2-43be-b027-4fcf52c1659d
# ╠═01dc9f2e-6ed9-4ef2-8531-5934dd134469
# ╠═c89439fa-d4ff-4c40-b3ef-f9e3c63c7a17
# ╠═fd21b9fb-91bc-4510-a545-a6b5730ae1ae
# ╠═e51d9829-7327-4e16-99fd-09eb287ee572
# ╠═639c7eea-8e60-4a7e-a0e5-90fae355e666
# ╠═0fb0dd27-6de6-4700-874a-7342b02d7e3c
# ╠═542914c5-87d2-4dff-bf9a-017f58ee51aa
# ╠═b34b3023-3b9e-4bea-b97b-201565158604
# ╠═f1e81c3f-30ac-4461-8e61-63293cf6f9d1
# ╠═8da56caf-8da3-4d34-a595-004066c60ef7
# ╠═a682661f-7e86-4c7f-9d44-b64259619745
# ╠═3a7be2e3-1b90-48e6-aa67-1b4d23db1b9c
# ╠═926ac5f0-ab29-4cc4-ac72-64270272da05
# ╠═7ee63fe0-c963-451c-9f12-2c12946b9fd1
# ╠═ce2c02e9-840e-4bc4-89ac-f71cbd57b865
# ╠═c0cb1d26-5f49-4c4f-a5bc-31636dd91e3c
# ╠═c13a19ad-724e-4c69-a63d-7ffe79a44a38
# ╠═a1f24b10-2141-47b6-84c4-a09cd9f16b50
# ╠═7e347cfa-0981-46cb-b29d-08477edd2fe8
# ╠═c23328aa-011a-4eda-919f-c9d5b240b493
# ╠═97cf5c61-ee3c-49b3-a333-bcec3fcd20df
# ╠═56c90b44-f42f-44ed-9d24-6516fcc11e28
# ╠═373e4ae0-b80b-4951-b3bc-e37aeb948f1b
# ╠═2a544c3a-dd1b-499b-9721-481bddea478e
# ╠═b2152e1a-1006-4f8a-af16-71628d3078f9
# ╠═48f32f3a-a33d-4298-ad38-4b6c48a3ad9b
# ╠═edf595e7-1e74-4b87-b1cb-efd491c19a82
# ╠═4cb7a0f7-e52e-4904-9cbf-da19fcc533a0
# ╠═fd8019c8-d1bc-43c4-b1ce-efc981547752
# ╠═b06b801f-be75-422a-9787-857d88276d20
# ╠═e7725cb4-2d20-4b1c-be4e-8890f99f7d45
# ╠═cfc979ba-fc94-4628-ba87-4ce4514b3b1f
# ╠═725b50dc-250e-4105-8eed-8bcf5fdb8fe9
# ╠═24ae74a1-4d84-49ff-a82c-bfbe7bdc1c32
# ╠═1798e6c2-1ad6-477c-b639-c93efd95e2c6
# ╠═45d619d0-9523-4975-b06b-e230de7a2b41
# ╠═c5148ca9-6e21-4cc0-a68f-af9137bc8afc
# ╠═444ac01f-8de3-4a32-aaba-1b0306eb7fc3
# ╠═56b40c57-5147-4467-8390-bd4724868d28
# ╠═a3a921df-8e12-4d8f-826a-8e132d694108
# ╠═d2330c32-8c6e-4068-9972-ee0dcfab4da6
# ╠═4568ac71-b1c6-4a17-90c1-d6cdacd7f732
# ╠═d0a55dc8-d109-4204-9e72-83c4556969d5
# ╠═4b61499c-fc35-4af5-b47a-d0f6a1932abb
# ╠═4f1ebb9b-d098-4dca-9d55-56fc5e73c360
# ╠═e2576b89-b2fe-44bc-8cca-e61cab632f10
# ╠═b7de9176-73c3-4d76-9ddf-9eaad352b5ce
# ╠═e9fa8c39-617a-463e-9e90-0e5e06ea1947
# ╠═af024a64-98cf-4308-afc3-4d194832f830
# ╠═51e2357d-bf61-406a-9acc-4989c1621464
# ╠═93345720-7e3b-4465-a1ca-a7084e9de575
# ╠═7bb4c7e9-b72f-4b99-8224-4e342d8889d4
# ╠═800d54ad-a60e-4dae-b351-1795ed65d050
# ╠═d2bcefcd-5cc5-4a8e-8dba-d7a9817c3616
# ╠═988ed586-3f13-4cf7-bd74-2a45b687f356
# ╠═75581257-1b58-4db9-a8fe-2fb551e8b0a5
# ╠═e8761b55-7df3-4f32-98be-42d6a6a83bff
# ╠═703b4539-1f1c-4b83-9a30-18184df6769c
# ╠═1dfe0ba1-d8b1-428c-8053-1c3738402107
# ╠═44be6af0-ffa4-40cb-8d8e-8f58020a4cbe
# ╠═e3a1b6d2-0a89-4078-be33-b9d2a700b920
# ╠═a37e04ef-b17e-4bbb-bf9d-fb5b122a6840
# ╠═b1632b5f-f2a2-40b2-986a-2da969d7ddde
# ╠═7e0f1deb-c61f-49c0-aede-c04d31c3207d
# ╠═5178bced-3a2e-4732-be4a-a5dbbbed6f22
# ╠═51d2528b-ae9a-46a3-884f-f7d90f90a341
# ╠═97a71e16-7e27-4e23-96dd-8c2d3a839d98
# ╠═0ae450e3-6436-41f5-9f43-7fa366f97de7
# ╠═e70e6737-168e-4e68-9292-055f924460ee
# ╠═c295464b-434e-45b1-8ffb-595212baac50
# ╠═c9563f10-5a5b-48ed-ae91-e05873184a22
# ╟─00000000-0000-0000-0000-000000000001
# ╟─00000000-0000-0000-0000-000000000002

max_stars_repo_name: harakiso/pluto

max_issues_repo_name: harakiso/pluto

max_forks_repo_name: harakiso/pluto


text:
module TestMLJIntegration

using MLJBase, MLJModels, MLJTuning, TreeParzen
X, y = @load_iris

@load DecisionTreeClassifier

space = (Dict(
    :min_purity_increase => HP.Uniform(:min_purity_increase, 0.0, 1.0),
    :merge_purity_threshold => HP.Uniform(:merge_purity_threshold, 0.0, 1.0),
    :pdf_smoothing => HP.Uniform(:pdf_smoothing, 0.0, 1.0),
))

dtc = DecisionTreeClassifier()

tm = TunedModel(
    model=dtc,
    ranges=space,
    tuning=MLJTreeParzen.MLJTreeParzenTuning(;max_simultaneous_draws=100),
    n=100,
    resampling=CV(nfolds=3, rng=4141),
    measure=cross_entropy
)

mach = machine(tm, X, y)

@info("lazy space")
fit!(mach)

suggestion = Dict(
    :min_purity_increase => 0.6,
    :merge_purity_threshold => 0.6,
    :pdf_smoothing => 0.6,
)

mljspace = MLJTreeParzen.MLJTreeParzenSpace(space, suggestion)

tm = TunedModel(
    model=dtc,
    ranges=mljspace,
    tuning=MLJTreeParzen.MLJTreeParzenTuning(;max_simultaneous_draws=100),
    n=100,
    resampling=CV(nfolds=3, rng=4141),
    measure=cross_entropy
)

mach = machine(tm, X, y)

@info("single suggestion")
fit!(mach)

suggestions = [
    Dict(
        :min_purity_increase => 0.25,
        :merge_purity_threshold => 0.50,
        :pdf_smoothing => 0.75,
    ),
    Dict(
        :min_purity_increase => 0.75,
        :merge_purity_threshold => 0.25,
        :pdf_smoothing => 0.50,
    ),
    Dict(
        :min_purity_increase => 0.50,
        :merge_purity_threshold => 0.75,
        :pdf_smoothing => 0.25,
    ),
]

mljspace = MLJTreeParzen.MLJTreeParzenSpace(space, suggestions)

tm = TunedModel(
    model=dtc,
    ranges=mljspace,
    tuning=MLJTreeParzen.MLJTreeParzenTuning(;max_simultaneous_draws=100),
    n=100,
    resampling=CV(nfolds=3, rng=4141),
    measure=cross_entropy
)

mach = machine(tm, X, y)

@info("three suggestions")
fit!(mach)

end # module
true

ext: jl


text:
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
#
# Description
#
#   Types and structures of TLE.
#
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

export TLE

"""
    TLE

This structure contains the same elements of the TLE with the same units.

# Fields

* `name`: Name of the satellite.

## First line

* `sat_num`: Satellite number.
* `classification`: Classification ('U', 'C', or 'S').
* `int_designator`: International designator.
* `epoch_year`: Epoch year (two digits).
* `epoch_day`: Epoch day (day + fraction of the day).
* `epoch`: The epoch represented in Julian Day.
* `dn_o2`: 1st time derivative of mean motion / 2 [rev/day²].
* `ddn_o6`: 2nd time derivative of mean motion / 6 [rev/day³].
* `bstar`: B* drag term.
* `elem_set_number`: Element set number.
* `checksum_l1`: Checksum of the line 1 (modulo 10).

## Second line

* `i`: Inclination [deg].
* `Ω`: Right ascension of the ascending node [deg].
* `e`: Eccentricity.
* `ω`: Argument of perigee [deg].
* `M`: Mean anomaly [deg].
* `n`: Mean motion [rev/day].
* `rev_num`: Revolution number at epoch [rev].
* `checksum_l2`: Checksum of the line 2 (modulo 10).

"""
@with_kw_noshow struct TLE
    name::String

    # First line
    # ==========
    sat_num::Int
    classification::Char
    int_designator::String
    epoch_year::Int
    epoch_day::Float64
    epoch::Float64
    dn_o2::Float64
    ddn_o6::Float64
    bstar::Float64
    elem_set_number::Int
    checksum_l1::Int

    # Second line
    # ===========

    i::Float64
    Ω::Float64
    e::Float64
    ω::Float64
    M::Float64
    n::Float64
    rev_num::Int
    checksum_l2
end


text:
using Test

@testset "AISIS10016" begin

    include(string(@__DIR__) * "/AISIS10016/" * "AISIS10016Test1.jl")
    include(string(@__DIR__) * "/AISIS10016/" * "AISIS10016Test2.jl")

end


text:
using Test
using ExtensibleEffects
using DataTypesBasic
using TypeClasses
using Suppressor
splitln(str) = split(strip(str), "\n")
import ExtensibleEffects: autorun

# State
# -----

state_flatmap = @syntax_flatmap begin
  a = State(x -> (x+2, x*x))
  b = State(x -> (a + x, x))
  @pure a, b
end
@test state_flatmap(3) == ((5,14), 9)

state_eff = @runstate @syntax_eff begin
  a = State(x -> (x+2, x*x))
  b = State(x -> (a + x, x))
  @pure a, b
end
@test state_eff(3) == ((5,14), 9)

# nesting Callable and State works well, because Callable uses `@insert_into_runhandlers` to add its handler.
callable_state_eff = @runcallable @runstate @syntax_eff begin
  v = [1,3,4]
  a = State(s -> (v+s, s*s))
  o = isodd(a) ? Option(100) : Option()
  b = Callable(x -> x + a + o)
  @pure v, a, o, b
end

vector, state = callable_state_eff(1)(3)
@test state == 6561
@test vector == [Const(nothing), Const(nothing), Identity((4, 85, 100, 186))]

# CAUTION: the other way around it does not interact well, actually we implemented to throw an error
@test_throws ErrorException @runstate @runcallable @syntax_eff begin
  v = [1,3,4]
  a = State(s -> (v+s, s*s))
  o = isodd(a) ? Option(100) : Option()
  b = Callable(x -> x + a + o)
  @pure v, a, o, b
end

# We could have allowed for this interaction as well, using `@insert_into_runhandlers`, however this would lead
# to non-well-formed results:
# The outer level should be a State then, however it is not, it just has a plain Callable inside, without added state,
# while the state is actually added WITHIN the callable.

max_stars_repo_name: schlichtanders/ExtensibleEffects

max_issues_repo_name: schlichtanders/ExtensibleEffects

max_forks_repo_name: schlichtanders/ExtensibleEffects


text:
function test_Robot_Conv(model,predict,w; batchsize=32,saveImages=true)
    @time begin
        printlnFlush("Loading weights from $(w)")
        w = loadNetwork(w)
        colormap = map((x)->convert(RGB,x),linspace(Colors.HSV{Float32}(0.0,1.0,1.0),Colors.HSV{Float32}(240.0,1.0,1.0),5))
        colors = Dict()
        for i=1:length(colormap)
            colors[i] = Float32[colormap[i].r, colormap[i].g, colormap[i].b]
        end
        totalloss = totalcorrect = totalcount = imcounter = 0
        x,y = loadData_Robot(model,"test")
        batchCount = Int64(ceil(size(y,4)/batchsize))
        for batch=1:batchCount
            printUpdate(@sprintf("Batch: %5d/%-5d",batch,batchCount))
            #Calculate current indices
            startIndex = 1+(batch-1)*batchsize
            endIndex = min(batch*batchsize,size(y,4))
            #Minibatch
            batchx = KnetArray(x[:,:,:,startIndex:endIndex])
            batchy = y[:,:,:,startIndex:endIndex]
            #Accuracy
            ypred = Array(predict(w,batchx))
            totalloss += pixelwiseSoftloss(ypred,batchy)
            testAcc = pixelwiseAccuracy(ypred,batchy)
            totalcorrect += testAcc[1]
            totalcount += testAcc[2]
            #Image conversion
            if saveImages
                for im=1:size(ypred,4)
                    savePrediction(ypred[:,:,:,im],colors,outputPath(@sprintf("Robot/Conv/%s/%05d.png",model,imcounter)))
                    imcounter += 1
                end
            end
        end
        totalloss /= batchCount
        printlnFlush(@sprintf("Total Loss: %0.10f\tTotal Accuracy: %0.4f%%",totalloss,totalcorrect/totalcount*100))
    end
end

function test_Robot_LSTM(model,predict,w; saveImages=true)
    @time begin
        printlnFlush("Loading weights from $(w)")
        @time w = loadNetwork(w)
        colormap = map((x)->convert(RGB,x),linspace(Colors.HSV{Float32}(0.0,1.0,1.0),Colors.HSV{Float32}(240.0,1.0,1.0),5))
        colors = Dict()
        for i=1:length(colormap)
            colors[i] = Float32[colormap[i].r, colormap[i].g, colormap[i].b]
        end
        totalloss = totalcorrect = totalcount = imcounter = 0
        x,y = loadData_Robot(model,"test")
        batchCount = size(y,4)
        h = KnetArray(zeros(Float32,28,28,512,1))
        c = KnetArray(zeros(Float32,28,28,512,1))
        for t=1:batchCount
            printUpdate(@sprintf("Time: %5d/%-5d",t,batchCount))
            #Accuracy
            ypred = Array(predict(w,h,c,KnetArray(x[:,:,:,t:t])))
            totalloss += pixelwiseSoftloss(ypred,y[:,:,:,t:t])
            testAcc = pixelwiseAccuracy(ypred,y[:,:,:,t:t])
            totalcorrect += testAcc[1]
            totalcount += testAcc[2]
            #Image conversion
            if saveImages
                savePrediction(ypred[:,:,:,1],colors,outputPath(@sprintf("Robot/LSTM/%s/%05d.png",model,imcounter)))
                imcounter += 1
            end
        end
        totalloss /= batchCount
        printlnFlush(@sprintf("Total Loss: %0.10f\tTotal Accuracy: %0.4f%%",totalloss,totalcorrect/totalcount*100))
    end
end

function run_Robot_Conv_RGBD_test()
    test_Robot_Conv("RGBD",Robot_Conv_RGBD,"Robot/Conv_RGBD.jld"; batchsize=32,saveImages=true)
end

function run_Robot_LSTM_RGBD_test()
    test_Robot_LSTM("RGBD",Robot_LSTM_RGBD,"Robot/LSTM_RGBD.jld"; saveImages=true)
end

export run_Robot_Conv_RGBD_test,run_Robot_LSTM_RGBD_test

max_stars_repo_name: eeyrdkl/MScThesis

max_issues_repo_name: eeyrdkl/MScThesis

max_forks_repo_name: eeyrdkl/MScThesis


text:
# ------------------------------------------------------------------
# Licensed under the MIT License. See LICENSE in the project root.
# ------------------------------------------------------------------

"""
    graph(domain, localaniso, metric, searcher)
    graph(domain, localaniso, metric, refvariogram, searcher)
	graph(samples, domain, localaniso, metric, searcher)
    graph(samples, domain, localaniso, metric, refvariogram, searcher)

Create a graph connecting `domain` and `samples` points locally. Number of
edges/neighbors are defined by the `searcher` object associated to the domain.
Distance between points are based on local anisotropies `localaniso` and the
desired `metric` to calculate distance between two points. Available metrics:

* `AnisoDistance`   - averaged anisotropic distance
* `KernelVariogram` - non-stationary variogram kernel estimator

A reference variogram `refvariogram` is necessary if metric is `KernelVariogram`.
"""
function graph(obj::SpatialData, lpar::LocalAnisotropy, metric::Type{<:LocalMetric},
	searcher::NeighborSearchMethod)

	D = LocalGeoData(obj,lpar)
	graph!(D, metric, searcher)
end

function graph(obj::SpatialData, lpar::LocalAnisotropy, metric::Type{<:LocalMetric},
	refvario::Variogram, searcher::NeighborSearchMethod)

	D = LocalGeoData(obj, lpar, refvario)
	graph!(D, metric, searcher)
end

function graph(hd::SpatialData, obj::SpatialData, lpar::LocalAnisotropy, metric::Type{<:LocalMetric},
	searcher::NeighborSearchMethod)

	D = LocalGeoData(hd, obj,lpar)
	graph!(D, metric, searcher)
end

function graph(hd::SpatialData, obj::SpatialData, lpar::LocalAnisotropy, metric::Type{<:LocalMetric},
	refvario::Variogram, searcher::NeighborSearchMethod)

	D = LocalGeoData(hd, obj, lpar, refvario)
	graph!(D, metric, searcher)
end

function graph!(D::LocalGeoData, metric::Type{<:LocalMetric}, searcher::NeighborSearchMethod)
	O = searcher.domain
	n = nelements(O)
	sources, dest, wgts = Vector{Int}(), Vector{Int}(), Vector{Float64}()

	for i in 1:n
		icoord = centroid(O,i)
		idxs   = search(icoord, searcher)
		for j in idxs
			push!(sources, i)
			push!(dest, j)
			push!(wgts, evaluate(D, metric, i, j))
		end
	end

	if sdata(D)
		h1, hn = n+1, nall(D)
		for i in h1:hn
			j = spars(D,i)
			push!(sources, i)
			push!(dest, j)
			push!(wgts, evaluate(D, metric, i, j))
		end
	end

	g = SimpleWeightedGraph(sources, dest, wgts)
	comps = length(connected_components(g))
	@assert comps==1 "There are $comps subgroups of isolated vertices. Need to increase number of neighbors"
	D = @set D.graph = g
end

cleangraph!(D::LocalGeoData) = (D = @set D.graph = nothing)


text:
import Pkg
Pkg.activate(".")
Pkg.instantiate()

include("src/ForwardCurveSmoother.jl")

# If the packages below are not yet installed, you must install it once using the following command:
# Pkg.add("DataFrames")
# Pkg.add("CSV")
# After the installation, run the commands below to load the package.
using DataFrames
using CSV

spot     = CSV.read("Data/spot.csv", DataFrame)
contracts = CSV.read("Data/contracts.csv", DataFrame)

# Parameters used in the semi-parametric structural model
discount_factor            = 0.0 # discount factor used in the net present value
intercept                  = true # true or false, defining the existence of intercept in the forward curve equation
intercept_varying_maturity = false # true or false for the existence of a time-varying intercept according to the following equation: sqrt(j) + sqrt(j)^2 + sqrt(j)^3
seasonality_trading_date   = true # true or false for seasonality in the trading dates (one harmonic trigonometric function)
seasonality_delivery_date  = true # true or false for seasonality in the delivery dates (maturity) (one harmonic trigonometric function)
run_lasso                  = false # true or false to run AdaLasso to automatically select between the previous structures
minimum_maturity           = 2000 # maximum maturity to be available in the estimated forward curves
λ                          = 0.5 # objective function weight in the smoothing in the trading dates dimension

# Build a structure with the previous defined parameters
structural_parameters = ForwardCurveSmoother.StructuralParameters(discount_factor, intercept, intercept_varying_maturity,
                                                                            seasonality_trading_date, seasonality_delivery_date,
                                                                            run_lasso, minimum_maturity, λ)

# Run the semi-parametric structural model to estimate the forward curves.
# Additionally to the 'structural_parameters' built previously, two run the algorithm are necessary two CSV files, contracts.csv and spot.csv (template in folder 'Data').
# The first one contains the forward prices of contracts of different maturities and their correspondent delivery period, for different trading dates.
# The second, contains the spot prices for the same trading dates.

# The function output is two structs, one with the input and the other with the complete output of the model.
# Three CSV files are automatically saved in the folder 'Results':
#   recontructed_prices.csv - CSV file with the prices estimated for each one of the contracts defined in contracts.csv;
#   elementary_prices.csv - CSV file with the estimated forward curve for each trading date. This curve is composed by the elementary prices, which are contracts
#   with the delivery period of a day.
#   elementary_errors.csv - CSV file with the estimated smoothed errors.
input_structural, output_structural = ForwardCurveSmoother.fit_structural_model(contracts, spot,
                                                                                structural_parameters);

max_stars_repo_name: dietzemarina/ForwardCurveSmoother

max_issues_repo_name: dietzemarina/ForwardCurveSmoother

max_forks_repo_name: dietzemarina/ForwardCurveSmoother