5 つの機械学習アルゴリズムを使用してまれなイベントを分類する方法

5 つの機械学習アルゴリズムを使用してまれなイベントを分類する方法

[51CTO.com クイック翻訳] 機械学習はデータサイエンスの頂点であり、教師あり学習は機械学習の頂点とも言えるものです。

背景

数年前、ハーバード・ビジネス・レビュー誌は「データサイエンティスト:21世紀で最もセクシーな職業」という記事を掲載しました。この記事が発表された後、データサイエンスや統計学科は大学生の間で非常に人気となり、退屈なデータサイエンティストが初めて魅力的だと考えられるようになりました。

一部の業界では、データ サイエンティストが企業構造を変え、多くの意思決定を最前線の従業員に移行させています。データから実用的なビジネス洞察を得ることが、これまでになく容易になりました。

Andrew Ng 氏によると、教師あり学習アルゴリズムが業界に最も大きな価値をもたらしています。

教師あり学習がこれほど大きなビジネス価値を生み出す理由は疑う余地がありません。銀行はクレジットカード詐欺の検出にこれを使用、トレーダーはモデルに基づいて購入の決定を下すためにこれを使用、工場は生産ラインで不良部品をフィルタリングするためにこれを使用。

これらのビジネス シナリオには、次の 2 つの共通の特徴があります。

  • バイナリ結果: 詐欺 vs. 詐欺ではない、購入する vs. 購入しない、不良品 vs. 不良品ではない。
  • 不均等なデータ分布: 多数派グループと少数派グループ。

Andrew Ng 氏が最近指摘したように、少量データ、堅牢性、人的要因が AI プロジェクトの成功に対する 3 つの最大の障害です。ある意味では、少数派グループに関する稀なイベントの問題も、小さなデータの問題です。機械学習アルゴリズムは多数派グループからより多くの情報を学習し、少数派グループを簡単に誤分類する可能性があります。

ここで重要な疑問をいくつか挙げます。

  • これらのまれなイベントに対して、どの機械学習手法がより優れたパフォーマンスを発揮するでしょうか?
  • どのような指標ですか?
  • 欠点は何ですか?

この記事では、完全な R 実装コードを添付して、5 つの機械学習手法を実際のデータ セットに適用し、上記の質問に答えようとします。

詳しい説明と元のデータセットについては、元のデータセットをご覧ください: https://archive.ics.uci.edu/ml/datasets/bank+marketing; 完全な R コードについては、私の Github をご覧ください: https://github.com/LeihuaYe/Machine-Learning-Classification-for-Imbalanced-Data。

ビジネス上の問題

ポルトガルの銀行は、新しい銀行サービス (定期預金) のマーケティング戦略を実施しており、どのタイプの顧客がそのサービスに加入しているかを把握して、将来的に特定のグループをターゲットにマーケティング戦略を調整したいと考えています。データ サイエンティストは、営業チームやマーケティング チームと協力して、将来の加入者を特定するための統計ソリューションを考案しました。

R実装

以下はモデル選択プロセスと R 実装です。

1. インポート、データクリーニング、探索的データ分析

元のデータセットを読み込んでクリーンアップしましょう。

  1. #### データセットをロードする
  2. banking = read .csv("bank-additional- full .csv", sep = ";", header = T) ## 欠落データチェックし欠落データがないことを確認する
  3. banking[!complete.cases(banking),]#質的(因子)変数を数値再コード化する
  4. banking$job= recode(banking$job, “’admin.’=1;’blue-collar’=2;’entrepreneur’=3;’housemaid’=4;’management’=5;’retired’=6;’self-employed’=7;’services’=8;’student’=9;’technician’=10;’unemployed’=11;’unknown’=12”)#変数を再度再コード化
  5. 銀行$婚姻歴 = recode(銀行$婚姻歴, “'離婚歴'=1;'既婚'=2;'独身'=3;'不明'=4”)銀行$教育歴 = recode(銀行$教育歴, “'basic.4y'=1;'basic.6y'=2;'basic.9y'=3;'高校'=4;'文盲'=5;'専門課程'=6;'大学の学位'=7;'不明'=8”)銀行$デフォルト= recode(銀行$デフォルト, “'いいえ'=1;'はい'=2;'不明'=3”)銀行$住宅歴 = recode(銀行$住宅歴, “'いいえ'=1;'はい'=2;'不明'=3”)銀行$ローン = recode(銀行$ローン, “'いいえ'=1;'はい'=2;'不明'= 3 ”) '=1;'はい'=2;'不明'=3")
  6. banking$contact = recode(banking$loan, “'cellular'=1;'telephone'=2;”)banking$ month = recode(banking$ month , “'mar'=1;'apr'=2;'may'=3;'jun'=4;'jul'=5;'aug'=6;'sep'=7;'oct'=8;'nov'=9;' dec '=10”)banking$day_of_week = recode(banking$day_of_week, “'mon'=1;'tue'=2;'wed'=3;'thu'=4;'fri'=5;”)banking$poutcome = recode(banking$poutcome, “'failure'=1;'nonexistent'=2;'success'=3;”)#変数 “pdays” はバリエーションがないので削除します
  7. banking$pdays = NULL #変数「pdays」はDV同一線上にあるため削除
  8. 銀行$期間 = NULL

生データのクリーニングは、欠落している変数を再コード化し、質的変数を量的変数に変換する必要があるため、面倒に思えるかもしれません。実際のデータのクリーニングにはさらに長い時間がかかりました。 「データ サイエンティストは、時間の 80% をデータのクリーニングに費やし、時間の 20% をモデルの構築に費やしている」と言われています。

次のステップとして、結果変数の分布を調べることが役立つかもしれません。

  1. DV#EDA
  2. plot(banking$y,main= "プロット1: 従属変数の分布" )

図1

関連する変数(サービス注文)は均等に分布しておらず、「はい」よりも「いいえ」の方が多いことがわかります。データの分布は最終的な統計モデルに影響を与えるため、不均衡な分布には何らかの警告サインが出るはずです。多数派のケースに基づいて開発されたモデルを使用すると、少数派のケースを誤分類してしまう可能性が高くなります。

2. データのセグメンテーション

次のステップとして、データセットをトレーニング セットとテスト セットの 2 つの部分に分割しましょう。通常、80 対 20 の分割に従います。つまり、80% がトレーニング セットで、20% がテスト セットです。時系列データの場合は、データの 90% に基づいてモデルをトレーニングし、残りの 10% のデータをテスト データセットとして使用します。

  1. #データセットランダムにトレーニングセットテストセットに分割する
  2. set .seed(1) # コードを実行するたび同じ値を生成するようにシードを設定する# データを分割するためのインデックスを作成する: 80% トレーニング20% テスト
  3. index = round(nrow(banking)*0.2,digits=0)#データセット全体をランダムにサンプリングし、合計数をindex同じに保ちます
  4. test.indices = sample(1:nrow(banking), index ) #80% トレーニングセット
  5. banking.train=banking[-test.indices,] #20% テストセット
  6. banking.test=banking[test.indices,] # DV以外のトレーニングセットを選択
  7. YTrain = banking.train$y
  8. XTrain = banking.train %>% select (-y) # DV以外のテストセットを選択
  9. YTest = banking.test$y
  10. XTest = banking.test %>%選択(-y)

ここで、空のトレースレコードを作成しましょう。

  1. レコード = マトリックス(NA、nrow=5、ncol=2)
  2. colnames(レコード) <- c("train.error","test.error")
  3. rownames(レコード) <- c("ロジスティック","ツリー","KNN","ランダムフォレスト","SVM")

3. モデルのトレーニング

このセクションでは、各機械学習モデルのトレーニングおよびテスト エラーを計算するために使用する新しい関数 (calc_error_rate) を定義します。

  1. calc_error_rate <-関数(予測値、真の値)
  2. { return (mean( true .value != expected .value))}

予測されたラベルが実際の値と一致しない場合、関数は比率を計算します。

#1 ロジスティック回帰モデル

ロジスティック モデルの概要については、「機械学習 101」と「機械学習 102」の 2 つの記事をお読みください。

結果変数を除く他のすべての変数を含むロジスティック モデルを追加しましょう。結果はバイナリなので、モデルを二項分布(「ファミリー二項」)に設定します。

  1. glm.fit = glm(y ~ 年齢 + 因子 (職業) + 因子 (結婚) + 因子 (教育) + 因子 (デフォルト) + 因子 (住宅) + 因子 (ローン) + 因子 (連絡先) + 因子 () + 因子 (曜日) + キャンペーン + 前回 + 因子 (結果) + emp.var.rate + cons.price.idx + cons.conf.idx + euribor3m + nr.employed、データ = banking.train、家族 = 二項式)

次のステップはトレーニング エラーを取得することです。結果のタイプを予測し、多数決ルールを使用しているため、タイプを Responsive に設定します。事前確率が 0.5 以上の場合は結果を yes と予測し、それ以外の場合は no と予測します。

  1. prob.training = predict(glm.fit,type="response") banking.train_glm = banking.train %>% # 列車すべてのを選択
  2. mutate(predicted.value= as .factor(ifelse(prob.training<=0.5, “ no ”, “yes”))) # mutateを使用して新しい変数を作成し ifelseを使用して多数決ルールを設定します# トレーニングエラーを取得します
  3. logit_training_error <- calc_error_rate(predicted.value=banking.train_glm$predicted.value, true .value=YTrain) # ロジスティックモデルテストエラーを取得します
  4. prob.test = predict(glm.fit,banking.test,type="response") banking.test_glm = banking.test %>% #行を選択
  5. mutate(predicted.value2= as .factor(ifelse(prob.test<=0.5, “ no ”, “yes”))) # ルールを設定logit_test_error <- calc_error_rate(predicted.value=banking.test_glm$predicted.value2, true .value=YTest)# ロジスティックモデルトレーニングエラーテストエラーを書き留めます
  6. records[1,] <- c(logit_traing_error,logit_test_error)#最初の書き込む

#2 決定木

決定木の場合、クロス検証に従って最適な分割ノードを特定します。決定木の概要については、こちらの記事をご覧ください: https://towardsdatascience.com/decision-trees-in-machine-learning-641b9c4e8052。

  1. # 最適なノードを見つける
  2. #総数
  3. nobs = nrow(banking.train) #DT モデルを構築します。
  4. #DTモデルの構築については、このドキュメント(https://www.datacamp.com/community/tutorials/decision-trees-R)参照してください。
  5. bank_tree = tree(y~., data = banking.train, na.action = na.pass,
  6. control = tree.control(nobs , mincut =2, minsize = 10, mindev = 1e-3)) #クロス検証ツリーを剪定する
  7. .seed(3)を設定する
  8. cv = cv.tree(bank_tree、FUN=prune.misclass、K=10)
  9. 履歴書#最適な履歴書を特定する
  10. best.size.cv = cv$サイズ[ which.min (cv$dev)]
  11. best.size .cv#best = 3bank_tree.pruned<-prune.misclass(bank_tree, best=3)
  12. 要約(bank_tree.pruned)

クロス検証に最適なサイズは 3 です。

  1. # bank_tree.prunedトレーニングおよびテスト エラー
  2. pred_train = 予測(bank_tree.pruned、banking.train、type="class")
  3. pred_test = predict(bank_tree.pruned, banking.test, type="class") # トレーニングエラー
  4. DT_training_error <- calc_error_rate(predicted.value=pred_train, true .value=YTrain) # テストエラー
  5. DT_test_error <- calc_error_rate(predicted.value=pred_test, true .value=YTest) # エラーを書き留める
  6. レコード[2,] <- c(DT_training_error,DT_test_error)

#3 K近傍法(KNN)

ノンパラメトリック手法である KNN では、分布に関する事前の知識は必要ありません。つまり、KNN は関連するセルに k 個の最も近い近傍を割り当てます。

概要については、この記事「R での K 近傍法の初心者向けガイド: 初心者からエキスパートまで」を参照してください: https://towardsdatascience.com/beginners-guide-to-k-nearest-neighbors-in-r-from-zero-to-hero-d92cd4074bdb。クロス検証と do.chunk 関数の詳細については、次の記事を参照してください: https://towardsdatascience.com/beginners-guide-to-k-nearest-neighbors-in-r-from-zero-to-hero-d92cd4074bdb。

クロスバリデーションを使用すると、k = 20 のときにクロスバリデーション エラーが最小になることがわかりました。

  1. 倍数 = 10
  2. set .seed(1)# cut() は範囲を複数の区間分割します
  3. 折り畳み = seq.int (nrow(banking.train)) %>%
  4. cut(breaks = nfold, labels = FALSE ) %>%
  5. sampledo.chunk <-関数(chunkid、folddef、Xdat、Ydat、k) {
  6. train = (folddef!=chunkid)# トレーニング インデックスXtr = Xdat[train,] # インデックスによるトレーニングセットYtr = Ydat[train] # トレーニング セット内の実際のラベルXvl = Xdat[!train,] # テスト セットYvl = Ydat[!train] # テスト セット内の実際のラベルpredYtr = knn(train = Xtr, test = Xtr, cl = Ytr, k = k) # トレーニング ラベルを予測predYvl = knn(train = Xtr, test = Xvl, cl = Ytr, k = k) # テスト ラベルを予測data.frame(fold =chunkid, # k 個のフォールド
  7. train.error = calc_error_rate(predYtr, Ytr), # フォールドごとのトレーニング エラー
  8. val.error = calc_error_rate(predYvl, Yvl)) # フォールドごとのテストエラー
  9. }# 検証エラーを保存するにはerror.foldsを設定します
  10. error.folds = NULL # 10間隔データシーケンスを作成する
  11. kvec = c(1, seq(10, 50, length.out = 5)) set .seed(1) for (j in kvec){
  12. tmp = ldply(1:nfold, do.chunk, # 各折り畳みdo.関数を適用します
  13. folddef=folds、Xdat=XTrain、Ydat=YTrain、k=j) # 必須引数
  14. tmp$neighbors = j # 近隣各値を追跡する
  15. error.folds = rbind(error.folds, tmp) # 結果を結合する
  16. }パッケージreshape2#melt()は、ワイドフォーマットのデータをロングフォーマットのデータ変換します。
  17. errors = melt(error.folds, id.vars=c("fold","neighbors"), value.name = "error")

次に、検証エラーを最小化する最適な数値 K を見つけましょう。

  1. val.error.means = エラー %>%
  2. フィルター(変数== "val.error" ) %>%
  3. group_by(近隣, 変数) %>%
  4. summarise_each(関数(平均), 誤差) %>%
  5. グループ解除() %>%
  6. filter(error== min (error)) #最適な近傍数 = 20
  7. numneighbor =最大(val.error.means$neighbors)
  8. numneighbor## [20]

同じ手順に従って、トレーニング エラーとテスト エラーを見つけます。

  1. #トレーニングエラー
  2. .seed(20)を設定する
  3. pred.YTtrain = knn(train=XTrain、test=XTrain、cl=YTrain、k=20)
  4. knn_training_error <- calc_error_rate(predicted.value=pred.YTtrain, true .value=YTrain) #テストエラー =0.095 set.seed(20)
  5. pred.YTest = knn(トレーニング=XTrain、テスト=XTest、cl=YTrain、k=20)
  6. knn_test_error <- calc_error_rate(予測値=pred.YTest、 true .value=YTest) レコード[3,] <- c(knn_training_error、knn_test_error)

#4 ランダムフォレスト

ランダム フォレスト モデルを構築するための標準的な手順に従います。ランダム フォレストの概要については、次の記事を参照してください: https://towardsdatascience.com/understanding-random-forest-58381e0602d2。

  1. #デフォルト設定RFモデルを構築する
  2. .seed(1)を設定する
  3. RF_banking_train = randomForest(y ~ ., data=banking.train, importance= TRUE ) # トレーニングセットテストセットを使用して結果クラスを予測する
  4. pred_train_RF = predict(RF_banking_train, banking.train, type="class") pred_test_RF = predict(RF_banking_train, banking.test, type="class") # トレーニングエラー
  5. RF_training_error <- calc_error_rate(predicted.value=pred_train_RF, true .value=YTrain) # テストエラー
  6. RF_test_error <- calc_error_rate(予測値=pred_test_RF、 true .value=YTest) レコード[4,] <- c(RF_training_error、RF_test_error)

#5 サポートベクターマシン

ここでも、サポート ベクター マシンを構築するための標準的な手順に従います。アプローチの概要については、次の記事を参照してください: https://towardsdatascience.com/support-vector-machine-introduction-to-machine-learning-algorithms-934a444fca47。

  1. .seed(1)を設定する
  2. tune.out = tune(svm, y ~., data=banking.train,
  3. kernel="radial",ranges=list(cost=c(0.1,1,10)))# 最適なパラメータを見つける
  4. summary( tune.out )$best.parameters# 最適なモデル
  5. best_model = tune. out $best.modelsvm_fit=svm(y~., data=banking.train,kernel="radial",gamma=0.05555556,cost=1,probability= TRUE )# トレーニング/テスト セットを使用して結果クラスを予測する
  6. svm_best_train = 予測(svm_fit、banking.train、タイプ="class")
  7. svm_best_test = predict(svm_fit, banking.test, type="class") # トレーニングエラー
  8. svm_training_error <- calc_error_rate(predicted.value=svm_best_train, true .value=YTrain) # テストエラー
  9. svm_test_error <- calc_error_rate(予測値=svm_best_test、 true .value=YTest) レコード[5,] <- c(svm_training_error、svm_test_error)

4. モデルメトリクス

モデル選択プロセスに従ってすべての機械学習モデルを構築し、トレーニング エラーとテスト エラーを取得しました。このセクションでは、いくつかのモデル メトリックを使用して最適なモデルを選択します。

4.1 トレーニング/テストエラー

トレーニング/テストのエラーを使用して最適なモデルを見つけることができますか?

それでは結果を見てみましょう。

記録

図2

ここでは、ランダム フォレストのトレーニング エラーが最も低くなっていますが、他の方法でも同様のテスト エラーがあります。トレーニング エラーとテスト エラーが非常に近いため、どちらが明確な勝者であるかを判断するのが難しいことに気付くかもしれません。

さらに、分類精度 (トレーニング エラーまたはテスト エラー) は、非常に不均衡なデータセットの測定基準としては使用すべきではありません。これは、データセットが多数の例で構成されており、ランダムに推測した場合でも 50% の精度が得られるためです。さらに悪いことに、高精度のモデルは少数の例に厳しい「ペナルティ」を課す可能性があります。それでは、別の指標である ROC 曲線を見てみましょう。

4.2 受信者動作特性(ROC)曲線

ROC は、分類モデルがすべての分類しきい値でどのように機能するかを示すグラフィカル表現です。他の分類器よりも速く 1 に近づく分類器を優先します。

ROC 曲線は、真陽性率と偽陽性率という 2 つのパラメータを同じグラフ内の異なるしきい値でプロットします。

TPR(リコール)= TP/(TP+FN)

FPR = FP/(TN+FP)

図3

ROC 曲線は、分類精度を測定するだけでなく、TPR と FPR の間の適切なバランスも実現します。これはまれなイベントの場合に必要であり、多数例と少数例のバランスも実現したいためです。

  1. # ライブラリをロードする
  2. ライブラリ(ROCR)#追跡レコードの作成
  3. 曲線下面積 = 行列(NA、nrow=5、ncol=1)
  4. colnames(曲線下面積) <- c("AUC")
  5. rownames(Area_Under_the_Curve) <- c("Logistic","Tree","KNN","Random Forests","SVM")########### ロジスティック回帰 ############
  6. #ロシア
  7. prob_test <- predict(glm.fit, banking.test, type="response")
  8. pred_logit<- 予測(prob_test,banking.test$y)
  9. performance_logit <- performance(pred_logit,measure = "tpr", x.measure = "fpr")########### 決定木 ############
  10. #ロシア
  11. pred_DT<-predict(bank_tree.pruned、banking.test、type="vector")
  12. pred_DT <- 予測(pred_DT[,2],banking.test$y)
  13. performance_DT <- performance(pred_DT、measure = "tpr"、x.measure = "fpr")########### KNN ############
  14. #ロシア
  15. knn_model = knn(train=XTrain, test=XTrain, cl=YTrain, k=20,prob= TRUE )prob <- attr(knn_model, “prob”)
  16. 確率 <- 2*ifelse(knn_model == "-1", 確率,1-確率) — 1
  17. pred_knn <- 予測(確率、YTrain)
  18. performance_knn <- performance(pred_knn, “tpr”, “fpr”)########### ランダムフォレスト ###########
  19. #ロシア
  20. pred_RF<-predict(RF_banking_train、banking.test、type="prob")
  21. pred_class_RF <- 予測(pred_RF[,2],banking.test$y)
  22. performance_RF <- performance(pred_class_RF、measure = "tpr"、x.measure = "fpr")########### SVM ############
  23. #ロシア
  24. svm_fit_prob = 予測(svm_fit、type="prob",newdata=banking.test、確率= TRUE )
  25. svm_fit_prob_ROCR = 予測(attr(svm_fit_prob,”確率”)[,2],banking.test$y==”はい”)
  26. performance_svm <- パフォーマンス(svm_fit_prob_ROCR、"tpr"、"fpr")

ROC曲線を描いてみましょう。

ランダム割り当ての確率を示すために直線を追加します。私たちの分類器はランダムな推測よりも優れたパフォーマンスを発揮しますよね?

  1. #ロジット
  2. plot(performance_logit,col=2,lwd=2,main="これら 5 つの分類方法ROC 曲線")legend(0.6, 0.6, c('logistic', 'Decision Tree', 'KNN','Random Forests','SVM'), 2:6)#decision tree
  3. プロット(performance_DT、col=3、lwd=2、 add = TRUE )#knn
  4. プロット(performance_knn、col=4、lwd=2、 add = TRUE )#RF
  5. plot(performance_RF,col=5,lwd=2, add = TRUE )# SVM
  6. プロット(performance_svm、col=6、lwd=2、 add = TRUE )abline(0,1)

図4

ここで勝者が決まります。

ROC 曲線によると、KNN (青線) は他のすべての方法よりも高くなっています。

4.3 曲線下面積(AUC)

名前が示すように、AUC は ROC 曲線の下の領域です。これは直感的な AUC 曲線の数学的表現です。 AUC は、分類器が可能な分類しきい値でどの程度うまく機能するかを組み合わせた結果を示します。

  1. ########### ロジット ###########
  2. auc_logit = パフォーマンス(pred_logit, "auc")@ y.values
  3. Area_Under_the_Curve[1,] <-c( as . numeric (auc_logit))########### 決定木 ###########
  4. auc_dt =パフォーマンス(pred_DT、"auc")@y.values
  5. 曲線下面積[2,] <- c( as . numeric (auc_dt))########### KNN ###########
  6. auc_knn < -パフォーマンス(pred_knn,"auc")@y.values
  7. Area_Under_the_Curve[3,] <- c( as . numeric (auc_knn))########### ランダムフォレスト ###########
  8. auc_RF =パフォーマンス(pred_class_RF、 "auc")@y.values
  9. 曲線下面積[4,] <- c( as . numeric (auc_RF))############ SVM ###########
  10. auc_svm<-performance(svm_fit_prob_ROCR,"auc")@ y.values ​​[[1]]
  11. 曲線下面積[5,] <- c( as . numeric (auc_svm))

AUC値を確認してみましょう。

曲線の下の面積

図5

さらに、KNN は最大の AUC 値 (0.847) を持っています。

結論

この論文では、ノンパラメトリック分類器である KNN がパラメトリック分類器よりも優れていることがわかりました。指標の観点から言えば、まれなイベントの分類精度よりも ROC 曲線を選択する方が合理的です。

原題: 5 つの機械学習アルゴリズムを使用してまれなイベントを分類する、著者: Leihua Ye

[51CTOによる翻訳。パートナーサイトに転載する場合は、元の翻訳者と出典を51CTO.comとして明記してください]

<<:  実稼働機械学習システムの構築に関する考慮事項

>>:  2020 年のトップ 10 テクノロジー トレンド

ブログ    
ブログ    
ブログ    
ブログ    
ブログ    

推薦する

クラウドコンピューティング、ビッグデータ、AI の関係と違いを 1 つの記事で理解する

クラウドコンピューティング、ビッグデータ、人工知能という言葉は誰もが聞いたことがあると思いますが、こ...

...

世界各国の人工知能の配置をご存知ですか?

[[207472]]人工知能は未来をリードする戦略技術です。世界の主要先進国は人工知能の発展を国家...

生産AI駆動型ホスト自動化テスト

翻訳者 | 陳俊レビュー | Chonglou業界では、従来のメインフレーム アプリケーションのコー...

テンセントの高性能グラフコンピューティングフレームワークPlatoとそのアルゴリズムの応用

[[318509]]プラトンについてテンセントの高性能グラフコンピューティングフレームワークPlat...

GAFT: Python で実装された遺伝的アルゴリズム フレームワーク

序文最近、遺伝的アルゴリズムを使用していくつかのことを最適化する必要があります。当初は、最適化のため...

2020 年のディープラーニングに最適な GPU の概要。どれが最適かを確認してください。

ビッグデータダイジェスト制作出典: lambdalabs編纂者:張秋月ディープラーニング モデルが強...

人間の脳神経の「100万分の1」の3D接続マップを描きます!膨大な量のデータは14億個の1Tハードドライブを埋め尽くす

少し前に、Google とハーバード大学が共同で、人間の脳の神経の 3D 接続マップを公開しました。...

...

未成年者の顔情報の処理には保護者の個別の同意が必要です

最高人民法院の楊万明副院長は、最高人民法院が十分な研究に基づいて顔情報に司法上の保護を与えるための「...

...

TensorFlow Lattice: 柔軟で制御可能、説明可能な機械学習

この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...

建設技術におけるAIは潜在性があるが、まだ現実にはなっていない

建設業界がテクノロジーの導入において他の業界に遅れをとっているのは周知の事実です。 2018年の米国...

大規模言語モデルはウォール街に勝てるか?株式選択における AI の可能性を明らかにする

金融分野における人工知能(AI)の応用は、特に株式市場の分析と予測において、幅広い注目と議論を集めて...