æ©æ¢°åŠç¿ã®éåžžã«åºæ¬çãªããšããã¹ã¿ãŒããããšã«ãªããšãå€ãã®å Žåã
PythonãŸãã¯Rã§é©åãªããŒã«ãåŠã¶ããšããå§ãããŸã
ã 圌ãã®é·æãšçæã«ã€ããŠã¯èª¬æããŸãããã.NETãšã³ã·ã¹ãã ã«ç²ŸéããŠããã ãã§ãããŒã¿ãµã€ãšã³ã¹ã®äžçã«çªå
¥ãããå Žåã¯ã©ãããã°ããã®ããèªåããŠãã ããã çãã¯ç°¡åã§ããçµ¶æããã«
FïŒã®æ¹åã«ç®ãåããŸã
ã.NETã®ç§ã®ããã«CïŒã®åºæ¬ã ããç¥ã£ãŠãããªãã
Accord.NET Frameworkãå匷ããŠã¿ãŠãã ããã
åé¡åé¡ã解決
ããããã®ã¢ããªã±ãŒã·ã§ã³ããã§ã«æ€èšããŸããããä»åã¯ç·åœ¢ååž°ã®æãç°¡åãªããŒã«ãæ€èšããŠã¿ãŸãã ãããè¡ãããã«ãæã
ã¯
ã¢ã¹ã¯ã¯åžé·ã®å
¬åŒ
ãŠã§ããµã€ãããåãããåžæ°ã®èšŽãã®åæã«é¢ããå
¬éããŒã¿ã䜿çšããŸãã
èšäºã®ã¿ã€ãã«ã§
CïŒã瀺ãããŠãããšããäºå®ã«ããããããã
VB.NETã§ãã³ãŒããåéããããšã
ãŸã ã
ç§ã¯ããªããã«ããã«æåŸ
ããå¿
èŠããããŸãïŒ

ãã®
ãããªã³ã¡ã³ãã
é¿ããããã« ãç§ã¯
ã¢ã¹ã¯ã¯æ¿åº ãæ¿åºãéœéåºçãªã©
ãšã¯äœã®é¢ä¿ããªããšãæåããããã«èšããŸãã ãããã£ãŠã
ç§ã¯åœŒãã®ä»äºã«ã€ããŠäžå¹³ãèšãã®ã¯æå³ããããŸãã ã
ãã®ããŒã¿ãå¶ç¶èŠã€ã
㊠ãæåã§ã¿ãã¬ããã«æã¡èŸŒãã§
GitHubã«æçš¿ããŸããã
ãŸãããã誰ããèå³ããããªãããã®èšäºã¯ç§ãããŒã¿ãµã€ãšã³ã¹ããŒãããç ç©¶ããæ¹æ³ã«æ§ãããããããµã€ã¯ã«ãç¶ããŸã
ïŒãããŠå®éã«ã¯ãããåŠã³ãŸããã§ããïŒ ã誰ããèå³ããããªããç§ã¯ãã¿ãã¬ã®äžã«ä»ã®èšäºãžã®ãªã³ã¯ãé ããŸããã
ãã®ä»ã®ãµã€ã¯ã«èšäº1.åºæ¬ãåŠã¶ïŒ
2.æåã®ã¹ãã«ãç·Žç¿ããŸã
ç§ã¯æ£çŽã«èšã£ãŠãç§ã¯ããã°ã©ããŒã§ã¯ãªããéåžžã«è¡šé¢çã«Accord.NETãå匷ããŸããã æ®å¿µãªããããã®äžã«å€ãã®æç®ããªããããã«å©çšã§ãããªã³ã©ã€ã³ãã¬ãŒãã³ã°ã³ãŒã¹ããªãã£ããããå€ãã®ç¹ã§éçºè
ã®ãµã€ãã®ã¿ãæ®ã£ãŠãããç§ãã¡ãæãã»ã©æçã§ã¯ãããŸããã
ãããã£ãŠãäžèšã§ææ¡ããããŒã¿ã»ããã䜿çšããŠ
ããµã€ã¯ã«ã®æåŸã®
èšäºã§åºæ¬çãªæäœãå®è¡ããŸããïŒããŒã¿ã»ããã®è©³çްãªèª¬æããããŸãïŒã ãããŠãã®èšäºã§ã¯ããããé³ã§ããŒã¿ãèªã¿ãã¢ãã«ãèšç·Žããããçš®ã®ã°ã©ããäœæããããšããŸãã
å
容ïŒ
ããŒãIïŒããŒã¿ã®æŠèŠãšå°ãããŒãIIïŒCïŒã³ãŒãã®èšè¿°ããŒãIIIïŒVBã³ãŒããšçµè«ã®äœæã³ãŒãã®èšè¿°ãéå§ããåã«ãããŒã¿ã«ã€ããŠ2èªã§èª¬æããŸãã
ããã¯ãã¢ã¹ã¯ã¯åžã®ããŸããŸãªå·è¡æ©é¢ãåãåã£ãåžæ°ã®èšŽãã®åæã«é¢ããå
¬éããŒã¿ã§ãã çµ±èšã¯ä¹ãããšèšããããåŸãŸãããããããŸã§ã®ãšããããã22ãæã§ãã
å®éãããã¯23ãæã ã£ããããããŸãããã11æã«éçºè
ãäžå®å
šãªããŒã¿ã»ãããæäŸããã®ã§ãç§ã¯ãããå«ããŸããã§ããã
ããŒã¿ã¯csv圢åŒã§è¡šç€ºãããŸãã ããŒã¿åã®æå³ã¯æ¬¡ã®ãšããã§ãã
num â
year â
month â
total_appeals â
appeals_to_mayor â
res_positive-
res_explained â
res_negative â
El_form_to_mayor â
Pap_form_to_mayor - to_10K_total_VAOâŠto_10K_total_YUZAO â 10000
to_10K_mayor_VAO⊠to_10K_mayor_YUZAOâ 10000
ããŒã¿åéããã»ã¹ãèªååããæ¹æ³ãèŠã€ããããªãã£ããããçµæãæäœæ¥ã§åéããå¿
èŠããã£ããããã©ããã§å°ãééããå¯èœæ§ããããŸãããŸããããŒã¿ã®ä¿¡é Œæ§ã¯èè
ã®è¯å¿ã«ä»»ããŸãã
ãã¬ãŒã ã¯ãŒã¯èªäœã«ã€ããŠã»ãã®å°ãã®èšèãäŒããã ãã§ãã³ãŒãã«ã¢ã¯ã»ã¹ã§ããŸãã
Accord.NETã¯
ãªãŒãã³ãœãŒã¹ãããžã§ã¯ãã§ãããã»ãšãã©ã®å ŽåãLGPLã©ã€ã»ã³ã¹ã®äžã§åæ¥éçºã«äœ¿çšã§ããŸãã ãã¬ãŒã ã¯ãŒã¯ã«ã¯ãçµ±èšç仮説ã®ãã¹ããããã¥ãŒã©ã«ãããã¯ãŒã¯ãŸã§ãããŒã¿åæã𿩿¢°åŠç¿ã«å¿
èŠãªãã¹ãŠã®åºæ¬çãªããŒã«ãããããã§ãã
ããã§ãè¯å¿ãæã£ãŠã³ãŒãã«ã¢ã¯ã»ã¹ã§ããŸãã
CïŒãšVB.NETã®ãããžã§ã¯ãã®ãœãªã¥ãŒã·ã§ã³ã
GitHubã«æçš¿ããŸãããããŠã³ããŒãããŠãã«ãã詊ã¿ãããšãã§ããŸãïŒçè«çã«ã¯éå§ããå¿
èŠããããŸãïŒã ãããžã§ã¯ãããŒãããèªåã§äœæããå Žåãåæ§ã®æ©èœã䜿çšããã«ã¯ã次ã®ããšãè¡ãå¿
èŠããããŸãã
- æ°ãããããžã§ã¯ããäœæããŸãïŒNet Framework 4.5ã§ã³ã³ãœãŒã«ãããžã§ã¯ããäœæããŸããïŒã
- ããã±ãŒãžãããŒãžã£ãŒïŒNuGetïŒã䜿çšããŠãAccord.ControlsããŒãžã§ã³3.8ïŒå¿
èŠãªä»ã®ãã¹ãŠã®ããã±ãŒãžããã«ããŸãïŒãããã³ããŒãã«ãæäœããããã®Accord.IOãã€ã³ã¹ããŒã«ããŸãã ãŸããã°ã©ããæç»ããã«ã¯ãæšæºã®Windows.Formsã©ã€ãã©ãªãæå¹ã«ããå¿
èŠããããŸãã å®éã«ã³ãŒããæžãããšãã§ããã®ã¯ããã ãã§ãã
ã¹ãã€ã©ãŒã®äžã«å®å
šãªCïŒã³ãŒããé
眮ããŸãã
CïŒã®å®å
šãªã³ãŒã using System; using System.Linq; using Accord.Statistics.Models.Regression.Linear; using Accord.IO; using Accord.Math; using System.Data; using System.Collections.Generic; using Accord.Controls; using Accord.Math.Optimization.Losses; namespace cs_msc_mayor { class Program { static void Main(string[] args) {
å€ãã®ç¹ã§ãç·åœ¢ååž°åé¡ã®è§£æ±ºç
ã¯éçºè
ãµã€ãã®äŸããåãããŠããŸããããã¹ãŠã¯ããã»ã©è€éã§ã¯ãããŸããããããã§ãéšåçã«ã³ãŒããåæããŸãããã
using System; using System.Linq; using Accord.Statistics.Models.Regression.Linear; using Accord.IO; using Accord.Math; using System.Data; using System.Collections.Generic; using Accord.Controls; using Accord.Math.Optimization.Losses;
ãµãŒãããŒãã£ã©ã€ãã©ãªã®ããŒã ã¹ããŒã¹ãããŒãããŸãã
namespace cs_msc_mayor { class Program { static void Main(string[] args) {
åå空éãã¯ã©ã¹ãã¡ã€ã³ã¡ãœãããäœæããŸã-ãã¹ãŠã¯ç°¡åã§ãã
ããŒã¿ãå¶åŸ¡ãµã³ãã«ãšãã¬ãŒãã³ã°ãµã³ãã«ã«åå²ããã®ã«åŸã§åœ¹ç«ã€å€æ°ã決å®ããŸãã
ããã¯ãPythonãããžã§ã¯ãããŒãžã§ã³ãš.NETããŒãžã§ã³
ïŒå°ãªããšãç§ã«ãšã£ãŠïŒã®äž¡æ¹ã§åæ°éšåã®åºåãæåãåãããã«èªã¿åãããããã«åœ¹ç«ã¡ãŸãã
ããŒã¿ãcsvãã¡ã€ã«ããããŒã¿ããŒãã«åœ¢åŒã«èªã¿åããŸãã
åŒã³åºããçºçããæã«é¢ããããŒã¿ãåŠçããã«ã¯ãããããæ¶åå¯èœãªåœ¢åŒã«å€æããå¿
èŠããããŸãããã®å Žåããã¹ãŠãäºéã«ãšã³ã³ãŒãããŸãã
Pythonã®ãœãªã¥ãŒã·ã§ã³ãšã®é¡æšã«ããããŸãèŸæžãäœæããæ¬¡ã«ã«ãŒãã䜿çšããŠããã«å¿ããŠããŒã¿ããã©ã³ã¹ã³ãŒãããŸãã
ç®ç颿°ãéžæããŸãã ãã¹ãŠã®ç³ãç«ãŠã«å¯Ÿããè¯å®çãªæ±ºå®ã®æ°ãäºæž¬ããŸãã
æåã®è¡ã§ã¯ããã®ããŒã¿ãããŒãã«ããååŸããdoubleåã«å€æããŸãã
次ã«ãä»ã®2ã€ã®å€æ°ã«ããã¬ãŒãã³ã°ãµã³ãã«ã®å Žåã¯0ã18ã®äœçœ®ãã³ã³ãããŒã«ãµã³ãã«ã®å Žåã¯18ã22ã®äœçœ®ãã³ããŒããŸãã
ç®ç颿°ãæã幎ãããã³ãããã®ç·æ°ã«ã¯ãã¬ãã¥ãŒã®è¯å®çãªçµæã«é¢ããæ
å ±ãå«ãŸããŠãããããããŒãã«ããäžèŠãªåãåé€ããŸãã
次ã«ããã©ã³ã¹ã³ãŒããããæãå«ãåã远å ããŸããæåã«æ°ããåãäœæããããŒãã«ã«è¿œå ããŠãããã«ãŒãã«å
¥åããŸãã
ç®ç颿°ãšã®é¡æšã«ãã£ãŠãå
¥åããŒã¿ïŒæ©èœïŒã®é
åãäœæããŸãã
ã¢ãã«ãäœæããããšã¯æ®ã£ãŠããŸãã æåã«ãéåžžã®ç·åœ¢ååž°ã®ãªããžã§ã¯ããäœæããããã«åºã¥ããŠãã»ãŒ30ã®å
åããããããéååž°ã®ã¢ãã«ãäœæããŸãã ãã¬ãŒãã³ã°ã»ããã§ã¢ãã«ãèªç¶ã«ãã¬ãŒãã³ã°ããŸãã
ãã¬ãŒãã³ã°ãµã³ãã«ã®äºæž¬ãçŽæ¥ååŸããŸãã
äºæž¬å€ãšå®éã®å€ã«é¢ããããŒã¿ãããã³ãšã©ãŒãšæ±ºå®ä¿æ°ã«é¢ããæ
å ±ãã³ã³ãœãŒã«ã«è¡šç€ºããŸãã
éçºè
ã¯ããã£ãŒãã衚瀺ããããã«ãµãŒãããŒãã£ã®ããŒã«ã䜿çšããããã«å©èšããŠããããã§ããããã€ã³ãã衚瀺ãããã¬ãŒã ã¯ãŒã¯ã«ä»å±ã®ScatterplotBoxãã£ãŒãã䜿çšããŸãã ããŒã¿ãå°ãªããšãäœããã®åœ¢ã§èŠèŠçã«ãªãããã«ãXã¹ã±ãŒã«ã§æéãã¬ã³ãã®é¡äŒŒç©ãäœæãïŒãã€ã³ã1ã¯1æ16æ¥ãæåŸã®ãã€ã³ãã¯2017幎10æïŒãæåã®22ã¯åæããŒã¿ã§ãããæåŸã®4ã¯äºæž¬ãããå¥ã®é
åã«ãã€ã³ããåé¡ããŸãïŒã°ã©ãå¥ã®è²ã§å¡ããŸãïŒã
ScatterplotBox.Showã¯ããã£ãŒããå«ããŠã£ã³ããŠã衚瀺ããŸãã X軞ãšU軞ã«ã€ããŠä»¥åã«æºåããããŒã¿ãåœŒã«æäŸããŸãã
æ£çŽãªãšãããç§ã¯Visual Basicãç¥ããŸããããããã§
ã¯CïŒããVB.NETãžã®ã³ã³ããŒã¿ãŒã圹ç«ã¡ãŸãã
ã³ãŒããéšåçã«åæããããšã¯ãããŸãããã³ãŒãã«æ®ãããã³ã¡ã³ããåèã«ããããšãã§ããŸããã³ã¡ã³ãã¯äž¡æ¹ã®ãããžã§ã¯ãã§åäžã§ãããã³ãŒããåæ§ã®ã»ã¯ã·ã§ã³ã«åå²ããŸãã
VB.NETã®å®å
šãªã³ãŒã Imports System Imports System.Linq Imports Accord.Statistics.Models.Regression.Linear Imports Accord.IO Imports Accord.Math Imports System.Data Imports System.Collections.Generic Imports Accord.Controls Imports Accord.Math.Optimization.Losses Module Program Sub Main() 'for separating the training and test samples Dim traintPos As Integer = 18 Dim testPos As Integer = 22 Dim allData As Integer = testPos + (testPos - traintPos) 'for correct reading symbol of float point in csv Dim customCulture As System.Globalization.CultureInfo = CType(System.Threading.Thread.CurrentThread.CurrentCulture.Clone(), System.Globalization.CultureInfo) customCulture.NumberFormat.NumberDecimalSeparator = "." System.Threading.Thread.CurrentThread.CurrentCulture = customCulture 'read data Dim CsvFilePath As String = "msc_appel_data.csv" Dim mscTable As DataTable = New CsvReader(CsvFilePath, True).ToTable() 'for encoding the string values of months into numerical values Dim monthNames As Dictionary(Of String, Double) = New Dictionary(Of String, Double) From {{"January", 1}, {"February", 2}, {"March", 3}, {"April", 4}, {"May", 5}, {"June", 6}, {"July", 7}, {"August", 8}, {"September", 9}, {"October", 10}, {"November", 11}, {"December", 12}} Dim months As String() = mscTable.Columns("month").ToArray(Of String)() Dim dMonths As Double() = New Double(months.Length - 1) {} For i As Integer = 0 To months.Length - 1 dMonths(i) = monthNames(months(i)) Next 'select the target column Dim OutResPositive As Double() = mscTable.Columns("res_positive").ToArray() 'separation of the test and train target sample Dim OutResPositiveTrain As Double() = OutResPositive.[Get](0, traintPos) Dim OutResPositiveTest As Double() = OutResPositive.[Get](traintPos, testPos) 'deleting unneeded columns mscTable.Columns.Remove("total_appeals") mscTable.Columns.Remove("month") mscTable.Columns.Remove("res_positive") mscTable.Columns.Remove("year") 'add coded in a double column month into Table 'create new column Dim newCol As DataColumn = New DataColumn("dMonth", GetType(Double)) newCol.AllowDBNull = True 'add new column mscTable.Columns.Add(newCol) 'fill new column Dim counter As Integer = 0 For Each row As DataRow In mscTable.Rows row("dMonth") = dMonths(counter) counter += 1 Next 'receiving input data from a table Dim inputs As Double()() = mscTable.ToArray() 'separation of the test and train sample Dim inputsTrain As Double()() = inputs.[Get](0, traintPos) Dim inputsTest As Double()() = inputs.[Get](traintPos, testPos) 'simple linear regression model Dim ols = New OrdinaryLeastSquares() With {.UseIntercept = True} 'linear regression model for several features Dim regression As MultipleLinearRegression = ols.Learn(inputsTrain, OutResPositiveTrain) 'make a prediction Dim predicted As Double() = regression.Transform(inputsTest) 'console output For i As Integer = 0 To testPos - traintPos - 1 Console.WriteLine("predicted: {0} real: {1}", predicted(i), OutResPositiveTest(i)) Next 'And print the squared error using the SquareLoss class Console.WriteLine("error = {0}", New SquareLoss(OutResPositiveTest).Loss(predicted)) 'print the coefficient of determination Dim r2 As Double = New RSquaredLoss(numberOfInputs:=29, expected:=OutResPositiveTest).Loss(predicted) Console.WriteLine("R^2 = {0}", r2) 'alternative print the coefficient of determination Dim ur2 As Double = regression.CoefficientOfDetermination(inputs, OutResPositiveTest, adjust:=True) Console.WriteLine("alternative version of R2 = {0}", r2) Console.WriteLine("Press enter and close chart to exit") 'for chart Dim classes As Integer() = New Integer(allData - 1) {} Dim mountX As Double() = New Double(allData - 1) {} For i As Integer = 0 To allData - 1 If i < testPos Then mountX(i) = i + 1 classes(i) = 0 'csv data is class 0 Else mountX(i) = i - (testPos - traintPos) + 1 classes(i) = 1 'predicted is class 1 End If Next 'make points of chart Dim OutChart As List(Of Double) = New List(Of Double)() OutChart.AddRange(OutResPositive) OutChart.AddRange(predicted) 'plot chart ScatterplotBox.Show("res_positive from months", mountX, OutChart.ToArray(), classes).Hold() 'for pause Console.ReadLine() End Sub End Module
ãã®ãããžã§ã¯ãã¯ãWindowsçšã®Visual StudioãšLinuxçšã®MonoDevelopã®äž¡æ¹ã䜿çšããŠã¢ã»ã³ãã«ã§ãããããéåžžã«ã¯ãã¹ãã©ãããã©ãŒã ã§ããããšã倿ããããšã«æ³šæããŠãã ããã 確ãã«ãããã¯æ¬åœã§ããCïŒã«é¢ããŠã®ã¿ãMonoã§ã®VB.NETã®ã³ãŒãã¯åžžã«åé¡ãªãã³ã³ãã€ã«ããããšã¯éããŸããã
åã®èšèã§ã¯ãªããã¹ã¯ãªãŒã³ã·ã§ãããèŠãŠãã ããã
VBãããžã§ã¯ãããŒãžã§ã³1.0.1ããã«ãããŸãã Windowsã§ã

CïŒãããžã§ã¯ãããŒãžã§ã³1.0.0ããã«ãããŸãã Linux Mintã§ã

ãããããåçã®çµæããããã«ç°ãªãããšã«æ°ã¥ããã§ãããã
ããã¯Monoã®ããã§ã¯ãããŸãã ã åé¡ã¯ãLinuxçšã«ã³ã³ãã€ã«ãããCïŒã®ãããžã§ã¯ãã®ããŒãžã§ã³ïŒ1.0.0ïŒã§ããã©ã³ã¹ã³ãŒããããåãæåäœã§èæ
®ããããšãå¿ããŠããããšã§ãã ãããŠãVisual Studioã§ã¢ã»ã³ãã«ãããVBäžã®ãããžã§ã¯ãïŒ1.0.1ïŒã®ããŒãžã§ã³ã§ã¯ãèæ
®ã«å
¥ããŸããã
æåã«ã¹ã¯ãªãŒã³ã·ã§ãããä¿®æ£ãããã£ãã®ã§ãããããã¯ãã®æ©èœãäºæž¬ã®å質ããããã«æ¹åãããšããæç¢ºãªãã¢ã³ã¹ãã¬ãŒã·ã§ã³ã ãšæããŸããã
ããããå®éã«ã¯ãåŠæ¥ä»¥å€ã®å©çããããããªãæªãçµæãéæããŸããã
ãã®çç±ã¯æ¬¡ã®èŠå ã§ããã
- æã£ãŠããããŒã¿ã¯ç°ãªãå€ã«ãªã£ãŠããŸãããã¹ã±ãŒã«ããŸããã§ããã ïŒç§ã¯ãŸã Accord.NETã䜿çšããŠãããè¡ãæ¹æ³ãçè§£ããŠããªãããïŒ ã
- ãŸããã»ãšãã©ãã¹ãŠã®å±æ§ãã¢ãã«ã«è©°ã蟌ã¿ãŸããããåæã«ãæªããå
åã®æé€ãã€ãŸãæ£ååã䜿çšããŸããã§ããã ïŒãªãã ãšæããŸããïŒããã§ããç§ããŸã ãããçè§£ããŠããªãããã§ãïŒ ã
- 確ãã«ãäœæããããŒã¿ãå°ãªããããéåžžã®äºæž¬ããããŸãã
ç¥ããªãããšããããŸãããããã幞ããªããšã«ãã¢ãã«ã®å®çšåãç®æšãšããŠèšå®ããŠããŸããã§ããããã¬ãŒã ã¯ãŒã¯ã®ååšã確èªããæãç°¡åãªããšãè¡ãããšãéèŠã§ãããæ¬¡ã«ããã®ããŒã«ãç¿åŸããAccord.Netã§ã®äœæ¥ãåŠã¶ããšãé¡ã£ãŠããŸãã