svm1.c 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #include "svm.h"
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <math.h>
  5. #define New(t, n) (t *)malloc((n) * sizeof(t))
  6. #define Size 124
  7. #define Bias 0.42954874481231037f
  8. #define Gama 2.57e-06f
  9. #define Feat 23
  10. static uint8_t okay = 0;
  11. // fill first number of each sv here
  12. static float Scales[Size] = {
  13. 0.15235731029950422f,0.15235731029950422f,0.19912011382534572f,0.3157460162025017f,0.19857543028072877f,0.08221876721682445f,0.0425025572971076f,0.05763072099190934f,0.13801669432617344f,0.20870653498415492f,0.11553654964471459f,0.24364322906458388f,0.057677291811556154f,0.2900227077976428f,0.12706182302655883f,0.007870701874147292f,0.16283635304047647f,0.2855170325682399f,0.15836813454062473f,0.2783568917103944f,0.17357616511163387f,0.010382572900087358f,0.1628794307594586f,0.30338470476949214f,0.13274088009122792f,0.08411386844482126f,0.2178360898124044f,0.07366067783698377f,0.15218633773641715f,0.19275719595170895f,0.018302866945317582f,0.19064839503506142f,0.08452172899199503f,0.31743985909912864f,0.28505892190713567f,0.27196597382020715f,0.028641825817987666f,0.18418037575475985f,0.08392936522816771f,0.1704040868350587f,0.09846385783138421f,0.30283315472249106f,0.35103425228032414f,0.3307143196017923f,0.08873872231394865f,0.14066098247307351f,0.01778825373363435f,0.08413861096981447f,0.23313354836561467f,0.09083118829874925f,0.22035518069302246f,0.01199539515826297f,0.20231436826391638f,0.22140590589548653f,0.021020368189327808f,0.18416101403820287f,0.016529595645652942f,0.048978932602985456f,0.0728825382695703f,0.22892526504953117f,0.21487490982549617f,0.31569073938744807f,0.21943686071547475f,0.2833454523749455f,0.2685078967728057f,0.003992407136977132f,0.18408677705627968f,0.006944536172833215f,0.23503862589652172f,0.22441255110092503f,0.17668838205575374f,0.07517108045921618f,0.11075928761395126f,0.07861082956799925f,0.1431147135810252f,0.11844488870016553f,0.04448580309492839f,0.0011530506550291276f,0.05221004624459148f,0.09870257964553575f,0.08372757008723711f,0.10505386108580722f,0.09134374315790278f,0.23403842875998865f,0.27803340343845734f,0.132850813760474f,0.06781018805488179f,0.10236788347969698f,0.17532545177261494f,0.2726659667900673f,0.07091621346565513f,0.06683643353923763f,0.1083837915775805f,0.006322662675038361f,0.014228091651108062f,0.20508847392062413f,0.06242607661373009f,0.05577163869455154f,0.0552113321825995f,0.13342715474973169f,0.24994325230424905f,0.15388886075166824f,0.12751815092430316f,0.014966168139467884f,0.028614372026208226f,0.08449253452004307f,0.0919046502528184f,0.27990597315951005f,0.22517393589134582f,0.1553856685814235f,0.140382464093383f,0.08055991372447821f,0.292808456556347f,0.2682429521511376f,0.3062592225678016f,0.02962872205153914f,0.23280488860446097f,0.228125630418083f,0.07247318407559089f,0.1512953364715955f,0.12417366254919882f,0.12720351242170702f,0.07829750951216621f,0.14592244538661808f,0.01024629760093861f
  14. };
  15. // fill element count of each sv here
  16. static uint32_t Elements[Size] = {
  17. 13,13,13,11,15,13,13,15,13,11,11,15,11,11,15,9,11,13,9,11,9,15,11,11,13,13,9,13,11,15,9,13,11,13,11,7,13,13,11,13,13,13,9,9,15,11,15,13,13,13,11,11,15,11,15,11,11,11,11,15,13,9,13,11,13,13,11,13,11,13,11,15,13,11,13,15,9,13,13,15,13,13,11,13,13,13,11,11,9,7,11,11,9,11,11,15,15,13,15,9,15,11,13,11,13,13,11,15,15,13,13,13,11,11,9,11,11,13,11,15,13,9,11,13,13
  18. };
  19. // fill the flattened sv weights here
  20. static float Weights[] = {
  21. 304.0f,304.0f,78.0f,453.0f,15.545624f,784.21297f,49.227811f,2369.3568f,82.909997f,1188.3717f,116.59218f,242.24283f,150.27437f,2056.5179f,570.0f,76.0f,658.0f,49.227811f,4179.4359f,82.909997f,785.85436f,106.22843f,564.52017f,126.95593f,553.73004f,150.27437f,1945.1428f,1704.0f,80.0f,1735.0f,49.227811f,11986.946f,98.455622f,393.19564f,126.95593f,537.94584f,150.27437f,1818.0222f,570.0f,77.0f,660.0f,15.545624f,753.84163f,49.227811f,4377.9812f,82.909997f,1047.5384f,108.81937f,236.28043f,126.95593f,393.24256f,150.27437f,2057.0622f,1731.0f,80.0f,1760.0f,25.909374f,1276.0657f,49.227811f,12828.937f,72.546248f,1175.2622f,116.59218f,413.08686f,150.27437f,1960.607f,322.0f,80.0f,470.0f,15.545624f,398.23289f,49.227811f,2488.5081f,82.909997f,1130.2811f,126.95593f,662.46112f,150.27437f,2126.8726f,1722.0f,78.0f,1751.0f,15.545624f,1058.7851f,49.227811f,12594.929f,82.909997f,786.37983f,108.81937f,341.38002f,126.95593f,317.44679f,150.27437f,1847.3802f,304.0f,77.0f,453.0f,49.227811f,2397.0027f,82.909997f,1058.6267f,106.22843f,447.36431f,126.95593f,517.72997f,150.27437f,2015.3646f,570.0f,78.0f,660.0f,49.227811f,4308.371f,82.909997f,1215.3645f,116.59218f,325.49289f,150.27437f,2144.3775f,1710.0f,80.0f,1739.0f,25.909374f,898.58711f,49.227811f,11957.665f,119.18312f,354.68047f,150.27437f,1917.7876f,570.0f,77.0f,656.0f,15.545624f,403.48757f,49.227811f,4219.7856f,82.909997f,724.8329f,106.22843f,564.14245f,126.95593f,583.6819f,150.27437f,2010.6336f,350.0f,81.0f,499.0f,15.545624f,381.26844f,49.227811f,2555.826f,82.909997f,1095.3026f,150.27437f,2334.8343f,1711.0f,80.0f,1741.0f,25.909374f,995.76937f,49.227811f,11910.606f,82.909997f,1349.552f,150.27437f,1931.2539f,1709.0f,80.0f,1739.0f,25.909374f,1532.8176f,49.227811f,12423.466f,82.909997f,905.04617f,106.22843f,345.83738f,126.95593f,304.16585f,150.27437f,1748.142f,1714.0f,81.0f,1744.0f,49.227811f,12157.238f,119.18312f,284.16963f,150.27437f,2007.1634f,543.0f,50.0f,630.0f,18.136562f,355.3574f,49.227811f,3766.1774f,82.909997f,1198.5002f,150.27437f,1860.7807f,497.0f,33.0f,573.0f,49.227811f,3484.908f,82.909997f,838.22382f,106.22843f,360.98655f,126.95593f,383.58299f,150.27437f,1557.7773f,1714.0f,80.0f,1744.0f,25.909374f,1064.0871f,49.227811f,12097.419f,150.27437f,1754.1813f,1722.0f,78.0f,1751.0f,49.227811f,12738.56f,106.22843f,366.74869f,126.95593f,482.85273f,150.27437f,1874.2328f,1713.0f,80.0f,1743.0f,25.909374f,854.08752f,49.227811f,11970.81f,150.27437f,1809.3987f,332.0f,81.0f,475.0f,18.136562f,279.85644f,49.227811f,2492.5706f,82.909997f,1099.8202f,103.6375f,221.27832f,126.95593f,217.18119f,150.27437f,2284.4029f,1721.0f,79.0f,1750.0f,49.227811f,12761.436f,82.909997f,1185.9317f,126.95593f,391.28771f,150.27437f,1879.6205f,1714.0f,81.0f,1744.0f,49.227811f,11916.108f,72.546248f,1332.4275f,119.18312f,360.77815f,150.27437f,1830.0082f,571.0f,78.0f,660.0f,15.545624f,472.94001f,49.227811f,4215.3515f,82.909997f,774.68442f,106.22843f,283.25605f,150.27437f,1982.7045f,1714.0f,81.0f,1745.0f,25.909374f,1580.1583f,49.227811f,12417.793f,82.909997f,1105.2312f,126.95593f,410.02782f,150.27437f,1842.4142f,548.0f,51.0f,634.0f,49.227811f,3964.1782f,82.909997f,1133.3125f,150.27437f,1995.6856f,285.0f,63.0f,432.0f,18.136562f,394.17333f,49.227811f,1996.0139f,82.909997f,1144.1217f,116.59218f,241.86902f,150.27437f,1956.2574f,570.0f,77.0f,660.0f,18.136562f,493.4666f,49.227811f,4285.895f,82.909997f,1183.156f,150.27437f,2182.6124f,350.0f,81.0f,499.0f,15.545624f,449.82964f,49.227811f,2802.1567f,82.909997f,995.85085f,106.22843f,362.54944f,126.95593f,537.05651f,150.27437f,2297.718f,1715.0f,80.0f,1745.0f,49.227811f,12003.105f,116.59218f,478.95837f,150.27437f,1686.4931f,1726.0f,80.0f,1756.0f,49.227811f,12791.98f,82.909997f,1069.5333f,98.455622f,306.76702f,116.59218f,401.15396f,150.27437f,1963.7446f,1714.0f,80.0f,1745.0f,25.909374f,1467.2502f,49.227811f,12276.351f,126.95593f,421.85028f,150.27437f,1843.4887f,489.0f,30.0f,560.0f,15.545624f,320.26758f,49.227811f,3352.6443f,82.909997f,751.7336f,106.22843f,349.06662f,150.27437f,1391.0651f,490.0f,30.0f,562.0f,15.545624f,469.11882f,49.227811f,3407.7202f,82.909997f,741.91516f,150.27437f,1492.8607f,1704.0f,80.0f,1734.0f,49.227811f,12086.212f,150.27437f,1859.2128f,1705.0f,80.0f,1736.0f,49.227811f,12093.866f,82.909997f,914.04871f,98.455622f,491.16242f,126.95593f,523.62429f,150.27437f,2001.5479f,350.0f,81.0f,499.0f,49.227811f,2646.3755f,82.909997f,1132.8698f,103.6375f,317.28403f,126.95593f,459.35031f,150.27437f,2407.1658f,303.0f,78.0f,454.0f,15.545624f,767.90682f,49.227811f,2432.4939f,82.909997f,1183.9024f,150.27437f,2080.3179f,488.0f,30.0f,561.0f,15.545624f,784.73546f,49.227811f,3622.8203f,82.909997f,1033.5395f,116.59218f,566.19212f,150.27437f,1607.0726f,498.0f,33.0f,572.0f,49.227811f,3592.9166f,82.909997f,1083.8097f,106.22843f,409.08235f,126.95593f,394.74475f,150.27437f,1624.5159f,1723.0f,81.0f,1753.0f,15.545624f,498.91896f,49.227811f,12496.174f,82.909997f,1034.5732f,119.18312f,229.28958f,150.27437f,1837.8037f,1730.0f,80.0f,1759.0f,49.227811f,12797.177f,116.59218f,304.7103f,150.27437f,1896.1791f,1710.0f,80.0f,1740.0f,49.227811f,11887.576f,119.18312f,378.52671f,150.27437f,1865.4523f,303.0f,78.0f,453.0f,15.545624f,549.9788f,49.227811f,2288.5274f,82.909997f,1307.9187f,106.22843f,271.36735f,126.95593f,332.65178f,150.27437f,2012.1934f,332.0f,81.0f,474.0f,15.545624f,621.5842f,49.227811f,2677.362f,82.909997f,1012.629f,150.27437f,2197.8353f,346.0f,81.0f,492.0f,15.545624f,326.59704f,49.227811f,2621.9309f,82.909997f,843.67982f,106.22843f,483.30813f,126.95593f,525.31433f,150.27437f,2258.335f,570.0f,79.0f,659.0f,49.227811f,4286.4039f,82.909997f,1070.2353f,106.22843f,386.22822f,126.95593f,614.12344f,150.27437f,2055.2833f,1710.0f,80.0f,1739.0f,25.909374f,1020.8505f,49.227811f,11926.07f,72.546248f,1234.9057f,121.77406f,372.68232f,150.27437f,1815.7632f,332.0f,81.0f,475.0f,15.545624f,404.55741f,49.227811f,2499.5373f,82.909997f,815.70665f,126.95593f,496.27932f,150.27437f,2150.875f,1732.0f,79.0f,1761.0f,25.909374f,1441.0415f,49.227811f,12875.657f,126.95593f,501.63923f,150.27437f,1922.1342f,1722.0f,79.0f,1751.0f,49.227811f,12652.869f,82.909997f,1251.9941f,116.59218f,277.36713f,150.27437f,1956.8718f,572.0f,76.0f,658.0f,18.136562f,397.13626f,49.227811f,4111.9198f,82.909997f,1211.4098f,106.22843f,209.12634f,126.95593f,221.71862f,150.27437f,2126.926f,1709.0f,80.0f,1739.0f,25.909374f,1615.5441f,49.227811f,12407.01f,82.909997f,1033.7025f,150.27437f,1777.8675f,571.0f,76.0f,658.0f,15.545624f,410.84622f,49.227811f,4211.5945f,82.909997f,1140.015f,106.22843f,376.5064f,126.95593f,640.14596f,150.27437f,2009.9044f,1721.0f,78.0f,1749.0f,20.727499f,742.24304f,49.227811f,12589.271f,114.00125f,301.10807f,150.27437f,1785.4627f,346.0f,79.0f,491.0f,18.136562f,263.82957f,49.227811f,2480.326f,82.909997f,1143.5787f,150.27437f,2261.3717f,1724.0f,79.0f,1753.0f,49.227811f,12243.86f,82.909997f,1237.1901f,119.18312f,445.45377f,150.27437f,2125.9714f,495.0f,33.0f,569.0f,18.136562f,446.42646f,49.227811f,3381.6672f,82.909997f,1053.1884f,150.27437f,1559.4335f,1707.0f,81.0f,1738.0f,25.909374f,1042.3f,49.227811f,12093.996f,82.909997f,1291.0549f,106.22843f,541.82937f,126.95593f,425.01431f,150.27437f,1949.5609f,571.0f,79.0f,661.0f,15.545624f,798.20841f,49.227811f,4374.0178f,82.909997f,1140.8009f,116.59218f,202.05977f,150.27437f,2100.3751f,489.0f,31.0f,562.0f,49.227811f,3496.1707f,82.909997f,918.05886f,150.27437f,1580.7978f,1714.0f,80.0f,1744.0f,25.909374f,1284.8397f,49.227811f,12367.576f,98.455622f,267.03553f,126.95593f,431.00784f,150.27437f,1857.6031f,304.0f,79.0f,454.0f,49.227811f,2308.2649f,82.909997f,1082.2801f,126.95593f,492.24749f,150.27437f,2141.2496f,570.0f,77.0f,657.0f,49.227811f,4268.0475f,82.909997f,1101.3347f,106.22843f,216.80299f,126.95593f,228.25619f,150.27437f,2144.0668f,570.0f,79.0f,661.0f,49.227811f,4379.5493f,82.909997f,1014.5331f,106.22843f,487.07381f,126.95593f,502.0411f,150.27437f,2022.6974f,1723.0f,78.0f,1751.0f,15.545624f,535.21398f,49.227811f,12086.41f,98.455622f,610.25721f,150.27437f,1861.7446f,514.0f,38.0f,594.0f,15.545624f,811.63197f,49.227811f,3933.2821f,82.909997f,1054.3781f,116.59218f,538.4839f,150.27437f,1766.3f,290.0f,65.0f,434.0f,15.545624f,404.69665f,49.227811f,2041.4138f,82.909997f,1096.5267f,150.27437f,1933.9581f,289.0f,64.0f,435.0f,15.545624f,386.08834f,49.227811f,1979.3818f,82.909997f,1053.6502f,116.59218f,421.75148f,150.27437f,1895.2662f,570.0f,77.0f,659.0f,49.227811f,4138.1325f,82.909997f,880.79335f,126.95593f,490.28726f,150.27437f,2024.2209f,351.0f,81.0f,496.0f,18.136562f,221.54042f,49.227811f,2629.5796f,82.909997f,1078.6896f,106.22843f,330.74417f,126.95593f,422.84287f,150.27437f,2361.0958f,1710.0f,80.0f,1740.0f,49.227811f,12131.789f,82.909997f,1339.6048f,116.59218f,377.37133f,134.72875f,249.95862f,150.27437f,1841.219f,1726.0f,80.0f,1755.0f,49.227811f,12828.003f,82.909997f,896.10644f,116.59218f,274.35791f,150.27437f,1890.9328f,348.0f,82.0f,494.0f,15.545624f,518.8791f,49.227811f,2800.3682f,82.909997f,1180.3452f,116.59218f,305.7552f,150.27437f,2353.3063f,304.0f,78.0f,453.0f,15.545624f,508.09491f,49.227811f,2271.4566f,82.909997f,870.70844f,106.22843f,564.76577f,126.95593f,584.93392f,150.27437f,2048.7667f,1721.0f,79.0f,1750.0f,49.227811f,12528.826f,82.909997f,821.26267f,150.27437f,2009.481f,537.0f,47.0f,620.0f,18.136562f,421.3006f,49.227811f,3714.0858f,82.909997f,1114.739f,121.77406f,215.00145f,150.27437f,1849.632f,570.0f,79.0f,660.0f,15.545624f,402.78916f,49.227811f,4263.6861f,82.909997f,879.3317f,126.95593f,457.03322f,150.27437f,2072.0734f,322.0f,80.0f,470.0f,18.136562f,373.79033f,49.227811f,2417.2855f,82.909997f,1202.7689f,103.6375f,204.79613f,129.54687f,211.9668f,150.27437f,2268.457f,1713.0f,80.0f,1743.0f,25.909374f,1064.2358f,49.227811f,12068.058f,101.04656f,383.17723f,126.95593f,533.71324f,150.27437f,1822.0017f,570.0f,79.0f,662.0f,18.136562f,393.77219f,49.227811f,4211.2788f,82.909997f,1217.2867f,103.6375f,216.84102f,150.27437f,2221.2503f,571.0f,78.0f,660.0f,49.227811f,4265.1871f,82.909997f,1181.5726f,116.59218f,239.26997f,150.27437f,2139.4256f,1725.0f,79.0f,1755.0f,49.227811f,12010.72f,75.137185f,1029.5082f,95.864684f,733.94439f,126.95593f,519.57838f,150.27437f,1775.4505f,1720.0f,79.0f,1748.0f,49.227811f,12769.92f,82.909997f,634.97521f,106.22843f,422.53843f,126.95593f,483.7299f,150.27437f,1751.3726f,544.0f,50.0f,631.0f,15.545624f,483.51005f,49.227811f,3932.7573f,82.909997f,1308.0578f,116.59218f,531.23848f,150.27437f,2082.3196f,1734.0f,79.0f,1763.0f,25.909374f,1135.8322f,49.227811f,12675.821f,119.18312f,255.46284f,150.27437f,2043.4328f,498.0f,33.0f,573.0f,49.227811f,3511.4984f,82.909997f,978.07344f,108.81937f,313.4751f,150.27437f,1624.2253f,1723.0f,80.0f,1753.0f,15.545624f,746.97773f,49.227811f,12528.245f,150.27437f,2023.9332f,1721.0f,79.0f,1750.0f,49.227811f,12545.247f,150.27437f,1811.785f,517.0f,40.0f,597.0f,15.545624f,715.55407f,49.227811f,3962.162f,82.909997f,928.77997f,150.27437f,1750.6806f,1713.0f,80.0f,1743.0f,25.909374f,1136.5245f,49.227811f,11929.478f,116.59218f,510.25505f,150.27437f,1812.2889f,1727.0f,79.0f,1757.0f,49.227811f,12187.761f,82.909997f,1173.9993f,150.27437f,1736.8936f,348.0f,80.0f,494.0f,49.227811f,2700.4769f,82.909997f,1145.5183f,116.59218f,324.56431f,150.27437f,2403.1003f,570.0f,77.0f,661.0f,15.545624f,443.14758f,49.227811f,4320.7303f,82.909997f,1087.5502f,150.27437f,2112.6603f,487.0f,30.0f,558.0f,15.545624f,401.5617f,49.227811f,3422.0154f,82.909997f,994.42678f,106.22843f,403.7315f,126.95593f,316.1448f,150.27437f,1569.0627f,497.0f,33.0f,572.0f,25.909374f,379.82176f,49.227811f,3489.6723f,82.909997f,908.73272f,106.22843f,317.40264f,126.95593f,394.48566f,150.27437f,1544.1409f,1731.0f,79.0f,1760.0f,25.909374f,1472.8969f,49.227811f,12903.141f,82.909997f,882.84103f,106.22843f,456.86259f,150.27437f,1783.1925f,1711.0f,80.0f,1742.0f,25.909374f,1388.3152f,49.227811f,12370.016f,82.909997f,901.04201f,106.22843f,445.11641f,126.95593f,576.58364f,150.27437f,1897.5312f,1725.0f,80.0f,1755.0f,15.545624f,686.2652f,49.227811f,12541.501f,150.27437f,1867.18f,1720.0f,80.0f,1750.0f,20.727499f,695.13677f,49.227811f,12244.45f,82.909997f,957.99623f,98.455622f,457.76312f,126.95593f,306.02922f,150.27437f,1776.327f,1724.0f,80.0f,1754.0f,25.909374f,933.90749f,49.227811f,12527.861f,72.546248f,1207.0268f,150.27437f,1863.0834f,1713.0f,80.0f,1743.0f,15.545624f,822.15561f,49.227811f,12115.946f,106.22843f,466.46699f,126.95593f,443.46026f,150.27437f,1918.4087f,1726.0f,79.0f,1755.0f,49.227811f,12050.257f,82.909997f,1391.8433f,126.95593f,483.09139f,150.27437f,1928.9391f,334.0f,79.0f,475.0f,49.227811f,2464.3877f,82.909997f,886.57039f,106.22843f,410.03241f,126.95593f,533.33813f,150.27437f,2139.1698f,496.0f,32.0f,571.0f,15.545624f,547.30664f,49.227811f,3456.3152f,82.909997f,1188.6821f,116.59218f,594.97761f,150.27437f,1673.4478f,304.0f,80.0f,457.0f,18.136562f,477.81863f,49.227811f,2236.3674f,82.909997f,1349.9478f,150.27437f,2233.3674f,1732.0f,79.0f,1762.0f,25.909374f,1500.4825f,49.227811f,12884.952f,72.546248f,1040.9276f,106.22843f,418.91472f,126.95593f,355.99679f,150.27437f,1823.545f,290.0f,65.0f,434.0f,15.545624f,438.49663f,49.227811f,2023.8787f,82.909997f,991.71118f,106.22843f,359.2175f,126.95593f,373.44842f,150.27437f,1885.4949f,1723.0f,80.0f,1753.0f,49.227811f,12120.103f,82.909997f,1417.0207f,98.455622f,428.37578f,116.59218f,431.07933f,150.27437f,1980.1081f,349.0f,81.0f,491.0f,15.545624f,291.66976f,49.227811f,2633.8301f,82.909997f,1170.2964f,116.59218f,282.47343f,150.27437f,2404.6285f,351.0f,81.0f,500.0f,49.227811f,2588.6952f,82.909997f,1142.8416f,106.22843f,288.06466f,126.95593f,354.24451f,150.27437f,2373.3102f,490.0f,30.0f,562.0f,49.227811f,3455.0026f,82.909997f,972.27668f,106.22843f,516.77419f,150.27437f,1523.6709f,350.0f,81.0f,495.0f,49.227811f,2662.2033f,82.909997f,1182.4817f,116.59218f,310.6862f,150.27437f,2431.6624f,1733.0f,79.0f,1762.0f,49.227811f,12419.214f,72.546248f,1389.4575f,150.27437f,1856.5136f,1731.0f,79.0f,1760.0f,25.909374f,1222.8643f,49.227811f,12787.332f,82.909997f,970.97096f,150.27437f,1930.5166f,570.0f,77.0f,659.0f,15.545624f,769.49914f,49.227811f,4394.6378f,82.909997f,1087.042f,150.27437f,2027.8127f,1731.0f,79.0f,1760.0f,25.909374f,1315.7933f,49.227811f,13010.815f,82.909997f,800.78393f,114.00125f,240.76425f,150.27437f,1854.3958f,1720.0f,79.0f,1750.0f,49.227811f,12628.693f,82.909997f,1280.129f,116.59218f,369.06376f,150.27437f,2010.1772f,490.0f,31.0f,562.0f,15.545624f,648.53572f,49.227811f,3719.9271f,82.909997f,842.67354f,106.22843f,416.58712f,126.95593f,294.05439f,150.27437f,1542.5858f,303.0f,78.0f,454.0f,49.227811f,2302.1591f,82.909997f,1071.8355f,106.22843f,418.9307f,126.95593f,570.58698f,150.27437f,2125.9434f,552.0f,52.0f,637.0f,49.227811f,4013.2991f,82.909997f,920.16689f,150.27437f,1939.9402f,335.0f,79.0f,475.0f,15.545624f,286.79055f,49.227811f,2463.5361f,82.909997f,888.11738f,150.27437f,2124.9226f,1714.0f,81.0f,1744.0f,25.909374f,1450.9619f,49.227811f,12186.855f,72.546248f,1131.532f,126.95593f,595.03313f,150.27437f,1970.9277f,1733.0f,79.0f,1762.0f,25.909374f,1299.7036f,49.227811f,12748.835f,72.546248f,1223.7829f,116.59218f,335.39017f,150.27437f,1957.4297f
  22. };
  23. static Node *Vector[Size];
  24. void svm_init() {
  25. int i, j, idx = 0;
  26. for (i = 0; i < Size; ++i) {
  27. Vector[i] = New(Node, Elements[i] + 1);
  28. for (j = 0; j < Elements[i]; ++j, ++idx) {
  29. Vector[i][j].idx = j + 1;
  30. Vector[i][j].val = Weights[idx];
  31. }
  32. Vector[i][j].idx = 0;
  33. }
  34. okay = 1;
  35. }
  36. Node *input() {
  37. Node *x = New(Node, Feat + 1);
  38. int i;
  39. for (i = 0; i < Feat; ++i) {
  40. x[i].idx = i + 1;
  41. scanf("%f", &x[i].val); // NOLINT
  42. }
  43. x[Feat].idx = 0;
  44. return x;
  45. }
  46. float rbf_kernel(const Node *x, const Node *y) {
  47. float sum = 0;
  48. while (x->idx != 0 && y->idx != 0) {
  49. if (x->idx == y->idx) {
  50. float d = x->val - y->val;
  51. sum += d * d;
  52. ++x, ++y;
  53. } else {
  54. if (x->idx > y->idx) {
  55. sum += y->val * y->val;
  56. ++y;
  57. } else {
  58. sum += x->val * x->val;
  59. ++x;
  60. }
  61. }
  62. }
  63. while (x->idx != 0) {
  64. sum += x->val * x->val;
  65. ++x;
  66. }
  67. while (y->idx != -0) {
  68. sum += y->val * y->val;
  69. ++y;
  70. }
  71. return expf(-Gama * sum);
  72. }
  73. int8_t svm_predict(const Node *x) {
  74. if (okay == 0) {
  75. printf("you should call `svm_init();` first.");
  76. return 0;
  77. }
  78. float sum = -Bias;
  79. uint32_t i;
  80. for (i = 0; i < Size; ++i) sum += Scales[i] * rbf_kernel(x, Vector[i]);
  81. return sum > 0 ? 1 : -1;
  82. }