Xgboost: [jvm-packages] java.lang.NullPointerException: ml.dmlc.xgboost4j.java.Booster.predict рдкрд░ рд╢реВрдиреНрдп

рдХреЛ рдирд┐рд░реНрдорд┐рдд 30 рдЬреБрд▓ре░ 2020  ┬╖  37рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: dmlc/xgboost

рдПрдирдкреАрдИ рдЕрдкрд╡рд╛рдж рддрдм рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рдЬрд╛рд╡рд╛ рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреА рдЬрд╛рддреА рд╣реИред

java.lang.NullPointerException: рдЕрд╢рдХреНрдд
ml.dmlc.xgboost4j.java.Booster.predict(Booster.java:309) рдкрд░
ml.dmlc.xgboost4j.java.Booster.predict(Booster.java:375) рдкрд░
com.tuhu.predict.predict.BaseModelPredict.predict(BaseModelPredict.java:71) рдкрд░
com.tuhu.predict.predict.XgboostFindPageModelPredict.predict(XgboostFindPageModelPredict.java:53) рдкрд░
com.tuhu.predict.service.impl.MlpFindPageFeatureServiceImpl.featureProcess(MlpFindPageFeatureServiceImpl.java:65) рдкрд░
com.tuhu.predict.api.controller.MlpFindPageController.recommendPredict(MlpFindPageController.java:49) рдкрд░
com.tuhu.predict.api.controller.MlpFindPageController$$FastClassBySpringCGLIB$$f694b9ff.invoke рдкрд░ ()
org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) рдкрд░
org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint (CglibAopProxy.java:746) рдкрд░
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) рдкрд░
org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:52) рдкрд░
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:174) рдкрд░
org.springframework.aop.aspectj.AspectJAfterAdvice.invoke(AspectJAfterAdvice.java:47) рдкрд░
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:174) рдкрд░
org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke рдкрд░ (рдЖрдлреНрдЯрд░рд░рд┐рдЯрд░реНрдирд┐рдВрдЧAdviceInterceptor.java:52)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:174) рдкрд░
org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke рдкрд░ (AspectJAfterThrowingAdvice.java:62)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:174) рдкрд░
org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed рдкрд░ (MethodInvocationProceedingJoinPoint.java:88)
com.tuhu.springcloud.common.annotation.AbstractControllerLogAspect.doAround(AbstractControllerLogAspect.java:104) рдкрд░
sun.reflect.NativeMethodAccessorImpl.invoke0 (рдореВрд▓ рд╡рд┐рдзрд┐) рдкрд░
рдкрд░ sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
рдкрд░ sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:498) рдкрд░
org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644) рдкрд░
org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633) рдкрд░
org.springframework.aop.aspectj.AspectJAroundAdvice.invoke (AspectJAroundAdvice.java:70) рдкрд░
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:174) рдкрд░
org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke (ExposeInvocationInterceptor.java:92) рдкрд░
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185) рдкрд░
org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688) рдкрд░
com.tuhu.predict.api.controller.MlpFindPageController$$EnhancerBySpringCGLIB$$560ed775.recommendPredict()
sun.reflect.NativeMethodAccessorImpl.invoke0 (рдореВрд▓ рд╡рд┐рдзрд┐) рдкрд░
рдкрд░ sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
рдкрд░ sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:498) рдкрд░
org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209) рдкрд░
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136) рдкрд░
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle (ServletInvocableHandlerMethod.java:102) рдкрд░
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod (RequestMappingHandlerAdapter.java:877) рдкрд░
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:783) рдкрд░
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle (AbstractHandlerMethodAdapter.java:87) рдкрд░
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991) рдкрд░
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925) рдкрд░
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:974) рдкрд░
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:877) рдкрд░
javax.servlet.http.HttpServlet.service (HttpServlet.java:661) рдкрд░
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:851) рдкрд░
javax.servlet.http.HttpServlet.service(HttpServlet.java:742) рдкрд░
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) рдкрд░
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) рдкрд░
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) рдкрд░
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) рдкрд░
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) рдкрд░
com.tuhu.soter.starter.filter.SoterDefaultFilter.doFilter(SoterDefaultFilter.java:79) рдкрд░
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) рдкрд░
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) рдкрд░
com.tuhu.boot.logback.filter.LogFilter.doFilter(LogFilter.java:54) рдкрд░
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) рдкрд░
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) рдкрд░
org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.filterAndRecordMetrics(WebMvcMetricsFilter.java:158) рдкрд░
org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.filterAndRecordMetrics(WebMvcMetricsFilter.java:126) рдкрд░
org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:111) рдкрд░
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) рдкрд░
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) рдкрд░
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) рдкрд░
org.springframework.boot.actuate.web.trace.servlet.HttpTraceFilter.doFilterInternal(HttpTraceFilter.java:90) рдкрд░
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) рдкрд░
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) рдкрд░
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) рдкрд░
com.tuhu.boot.common.filter.HeartbeatFilter.doFilter(HeartbeatFilter.java:42) рдкрд░
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) рдкрд░
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) рдкрд░
com.tuhu.boot.common.filter.MDCFilter.doFilter(MDCFilter.java:47) рдкрд░
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) рдкрд░
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) рдкрд░
org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) рдкрд░
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) рдкрд░
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) рдкрд░
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) рдкрд░
org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:109) рдкрд░
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) рдкрд░
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) рдкрд░
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) рдкрд░
org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal (HiddenHttpMethodFilter.java:93) рдкрд░
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) рдкрд░
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) рдкрд░
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) рдкрд░
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal (CharacterEncodingFilter.java:200) рдкрд░
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) рдкрд░
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) рдкрд░
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) рдкрд░
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) рдкрд░
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) рдкрд░
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:496) рдкрд░
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) рдкрд░
org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:81) рдкрд░
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) рдкрд░
org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:677) рдкрд░
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) рдкрд░
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803) рдкрд░
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) рдкрд░
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790) рдкрд░
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun (NioEndpoint.java:1468) рдкрд░
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) рдкрд░
java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1149) рдкрд░
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) рдкрд░
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) рдкрд░
java.lang.Thread.run(Thread.java:748) рдкрд░

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдареАрдХ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдХрд▓ рддрдХ рддреИрдпрд╛рд░ рдХрд░ рд▓реВрдБрдЧрд╛ред

рд╕рднреА 37 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдХреНрдпреЛрдВрдХрд┐ рдореЙрдбрд▓ рдХреЛ рдкрд╛рдпрдерди рд╕реНрдХреЗрд▓реЗрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд╛рдж рдореЗрдВ рдЕрд╕рдВрдЧрддрддрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВред рд╕рдордп рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЯреАрдо рдиреЗ рд╕реНрдХреЗрд▓реЗрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд XGB рдореЙрдбрд▓ рдХреЛ рдкрд╛рдпрдерди XgBoost рдкреИрдХреЗрдЬ рдкрд░ рдПрдХ рдкрд░рдд рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рд╣реИ

image

рдЖрдк XGBoost рдХреЗ рдХрд┐рд╕ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдкрд╣рд▓реЗ рд╣рдордиреЗ рдПрдХ рдмрдЧ рддрдп рдХрд┐рдпрд╛ рдерд╛ рдХрд┐ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдкрд░ jvm рдкреИрдХреЗрдЬ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рдлреЗрдВрдХрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЦрд╛рд▓реА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдмрдлрд░ рдХреЗ рд╕рд╛рде рдЬрд╛рд░реА рд░рд╣рддрд╛ рд╣реИред

рдЖрдк XGBoost рдХреЗ рдХрд┐рд╕ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдкрд╣рд▓реЗ рд╣рдордиреЗ рдПрдХ рдмрдЧ рддрдп рдХрд┐рдпрд╛ рдерд╛ рдХрд┐ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдкрд░ jvm рдкреИрдХреЗрдЬ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рдлреЗрдВрдХрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЦрд╛рд▓реА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдмрдлрд░ рдХреЗ рд╕рд╛рде рдЬрд╛рд░реА рд░рд╣рддрд╛ рд╣реИред

рдХрдВрдкрдиреА рдХреЗ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд╕рдВрд╕реНрдХрд░рдг 1.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЧрддрддрд╛ рдореБрджреНрджреЛрдВ рдХреЗ рдХрд╛рд░рдг рдПрд▓реНрдЧреЛрд░рд┐рдердо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг 0.9.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрд▓реНрдЧреЛрд░рд┐рдердо рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдиреЗ 1.0 рдореЙрдбрд▓ рдлрд╝рд╛рдЗрд▓ рдХреЛ 0.9.0 рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рдпрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИ

рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ 1.2 (https://github.com/dmlc/xgboost/issues/5734) рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ рдФрд░ рдкреБрдирдГ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдЗрд╕ рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрдЧ рд╕реБрдзрд╛рд░ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреЗ рд▓рд┐рдП рдЙрд╕реА рдпрд╛ рдмрд╛рдж рдХреЗ xgboost рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ред XGBoost рдХрд╛ рдмрд╛рдЗрдирд░реА рдореЙрдбрд▓ рдкрд┐рдЫрдбрд╝рд╛ рд╕рдВрдЧрдд рд╣реИ, рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реБрдП, JSON рдЖрдзрд╛рд░рд┐рдд рдореЙрдбрд▓ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИред

рдореИрдВрдиреЗ 1.2.0 рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдорд╛рд░рд╛ред рддреЛ рд╕рдорд╕реНрдпрд╛ рдЕрднреА рднреА рдпрд╣рд╛рдБ рд╣реИред

рдореБрдЭреЗ рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рдорд┐рд▓реАред
рдореИрдВрдиреЗ рдореЙрдбрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП xgboost4j рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред

рдХреНрдпрд╛ рдЖрд╕рдкрд╛рд╕ рдХреЛрдИ рдХрд╛рдо рд╣реИ?

рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдЗрд╕рдиреЗ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдиреМрдХрд░рд┐рдпреЛрдВ рдХреЛ рд╡рд┐рдлрд▓ рдХрд░ рджрд┐рдпрд╛ред

@ranInc рдХреНрдпрд╛ рдЖрдк XGBoost рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдЕрднреА рддрдХ рд╣рдо рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд╕рд╣реА рдХрд╛рд░рдг рд╕реЗ рдЕрд╡рдЧрдд рдирд╣реАрдВ рд╣реИрдВред рд╣рдо рдЗрд╕реЗ рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдпрд╛рд╕ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдЪреВрдВрдХрд┐ рдЗрд╕ рдмрд╛рдд рдХреА рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдХрдм рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рдмреАрдЪ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВред

@ranInc рдЖрдк рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкреНрд░рджрд╛рди рдХрд░рдХреЗ рд╣рдорд╛рд░реА рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдо (рдбреЗрд╡рд▓рдкрд░реНрд╕) рдЕрдкрдиреА рдорд╢реАрди рдкрд░ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВ 1.2.0 рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ, рдореЗрд╡реЗрди рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдкрд░ рдирд╡реАрдирддрдо рдЬрд╛рд░ред
рдореЗрд░реЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдк рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ sapr 2.4.5 рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдКрдВ рдФрд░ xgboost 0.9 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВ - рдФрд░ рдпрд╣реА рдореИрдВ рдЕрднреА рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: рдореИрдВ рдЙрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореЙрдбрд▓/рдбреЗрдЯрд╛ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдБрдЧрд╛ рдФрд░ рдЙрд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░реВрдБрдЧрд╛ рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдмрд╛рдж рдореЗрдВ рдХрд╛рдо рд╡рд┐рдлрд▓ рд╣реЛ рдЧрдпрд╛ред

рдирдорд╕реНрддреЗ,
рдореБрдЭреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореЙрдбрд▓/рдбреЗрдЯрд╛ рдорд┐рд▓рд╛ред
рдореИрдВ рдЗрд╕реЗ рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
xgb1.2_bug.zip

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЖрдк рдмрдЧ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рддреЗ рд╣реИрдВ (рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдпрджрд┐ рдЖрдк рдпрд╣рд╛рдВ рдкреБрдирд░реНрд╡рд┐рднрд╛рдЬрди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рднрд╛рдЬрди рдореЗрдВ рдбреЗрдЯрд╛ рдХреА рдорд╛рддреНрд░рд╛ рдпрд╛ рдбреЗрдЯрд╛ рдХреЗ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдХреБрдЫ рд▓реЗрдирд╛-рджреЗрдирд╛ рд╣реИ):

from pyspark.ml.pipeline import PipelineModel
from pyspark.sql import SparkSession
from pyspark.sql.dataframe import DataFrame

df = spark.read.parquet("/tmp/6620294785024229130_features").repartition(200).persist()
df.count()

model = PipelineModel.read().load("/tmp/6620294785024229130_model_xg_only")

predictions = model.transform(df)

predictions.persist()
predictions.count()
predictions.show()

рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХрдм рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?
рдпрд╣ рдореБрдЭреЗ рд╕реНрдкрд╛рд░реНрдХ 3.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ ...

@ranInc рдЕрднреА рдирд╣реАрдВред рдЬрдм рд╣рдо рдмрдЧ рдХреЛ рдареАрдХ рдХрд░ рд▓реЗрдВрдЧреЗ рддреЛ рд╣рдо рдЖрдкрдХреЛ рдмрддрд╛рдПрдВрдЧреЗред рд╕рд╛рде рд╣реА, рдХреНрдпрд╛ рдЖрдк рд╕реНрдХреИрд▓рд╛ рдореЗрдВ рдХреЛрдб рдкреЛрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдордиреЗ рдХрднреА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ XGBoost рдХреЗ рд╕рд╛рде PySpark рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рд╣реИред

      import org.apache.spark.ml.{Pipeline, PipelineModel}
      val df = spark.read.parquet("/tmp/6620294785024229130_features").repartition(200).persist()
      df.count()

      val model = PipelineModel.read.load("/tmp/6620294785024229130_model_xg_only")

      val predictions = model.transform(df)

      predictions.persist()
      predictions.count()
      predictions.show()

рдПрдХ рдФрд░ рд╕реВрдЪрдХ,
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреЗ рд▓рд┐рдП рднреЗрдЬреА рдЬрд╛ рд░рд╣реА рд╕рднреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рд╢реВрдиреНрдп/рдЕрдиреБрдкрд▓рдмреНрдз рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдЗрд╕ рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ?
рдЗрд╕рдХрд╛ рдореВрд▓ рд░реВрдк рд╕реЗ рдорддрд▓рдм рд╣реИ рдХрд┐ xgboost рд╕реНрдкрд╛рд░реНрдХ 3 рдкрд░ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рд╣рд╛рдБ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рд╣рдорд╛рд░реЗ рд╣рд╛рде рдЕрднреА рдХрд╛рдлреА рднрд░реЗ рд╣реБрдП рд╣реИрдВред рд╣рдо рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдкрд╣реБрдВрдЪреЗрдВрдЧреЗред рдореИрдВ рд╕рдореНрдорд╛рдирдкреВрд░реНрд╡рдХ рдЖрдкрдХреЗ рдзреИрд░реНрдп рдХреА рдХрд╛рдордирд╛ рдХрд░рддрд╛ рд╣реВрдВред рдзрдиреНрдпрд╡рд╛рджред

@ranInc рдореЗрд░реЗ рдкрд╛рд╕ рдЖрдЬ рдХреБрдЫ рд╕рдордп рдерд╛ рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдпрд╣рд╛рдВ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ java.lang.NullPointerException рддреНрд░реБрдЯрд┐ рдХреЛ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рд╣реИред

рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ, рдирд╡реАрдирддрдо рд╡рд┐рдХрд╛рд╕ рд╕рдВрд╕реНрдХрд░рдг ( master рд╢рд╛рдЦрд╛) рдЙрд╕реА рддрд░рд╣ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдпрд╣ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ

рдереНрд░реЗрдб рдореЗрдВ рдЕрдкрд╡рд╛рдж "рдореБрдЦреНрдп" org.apache.spark.SparkException: рдЪрд░рдг рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рдХрд╛рд░рдг рдиреМрдХрд░реА рдирд┐рд░рд╕реНрдд: рдЪрд░рдг 7.0 рдореЗрдВ рдХрд╛рд░реНрдп 0 1 рдмрд╛рд░ рд╡рд┐рдлрд▓ рд╣реБрдЖ, рд╕рдмрд╕реЗ рд╣рд╛рд▓ рдХреА рд╡рд┐рдлрд▓рддрд╛: рдЪрд░рдг 7.0 рдореЗрдВ рдЦреЛрдпрд╛ рдХрд╛рд░реНрдп 0.0 (TID 11, d04389c5babb, рдирд┐рд╖реНрдкрд╛рджрдХ рдбреНрд░рд╛рдЗрд╡рд░): ml.dmlc.xgboost4j.java.XGBoostError: [00:36:10] /workspace/src/learner.cc:1179: рдЪреЗрдХ рдлреЗрд▓: Learning_model_param_.num_feature >= p_fmat->Info().num_col_ (1 рдмрдирд╛рдо 2) : рд╕реНрддрдВрднреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмреВрд╕реНрдЯрд░ рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреАред

рдореИрдВ рдЖрдЧреЗ рдХреА рдЬрд╛рдВрдЪ рдХрд░реВрдВрдЧрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдЕрдм рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдЖрдкрдХреЗ рдЗрдирдкреБрдЯ рдореЗрдВ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреЗ рд▓рд┐рдП рдореЙрдбрд▓ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВред

xgboost рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рдмрд╛рдж jvm рдкреИрдХреЗрдЬ рдЬрд╛рд░реА рд░рд╣реЗрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдПрдХ рдЦрд╛рд▓реА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдмрдлрд░ рд╣реЛрдЧрд╛ред рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдХ рдЪреЗрдХ рдЧрд╛рд░реНрдб рдЬреЛрдбрд╝рд╛ рд╣реИред

рдмрд╕ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛рд╕реЗрдЯ рдореЗрдВ рдХреЙрд▓рдо рдХреА рд╕рдВрдЦреНрдпрд╛ рдЖрдкрдХреЗ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдбреЗрдЯрд╛рд╕реЗрдЯ рд╕реЗ рдЕрдзрд┐рдХ рдпрд╛ рдЙрд╕рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред

рдирдорд╕реНрддреЗ,
рдореЙрдбрд▓ рд╕рдорд╛рди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд╕реНрдкрд╛рд░реНрдХ рдореЗрдВ рдпрд╣ рдПрдХ рд╡реЗрдХреНрдЯрд░ рдХреЙрд▓рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рди рдХрд┐ рдХрдИ рдХреЙрд▓рдо рдХрд╛ред
рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдлрд┐рдЯрд┐рдВрдЧ рдФрд░ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреЗ рд▓рд┐рдП рд╡реЗрдХреНрдЯрд░ рдХрд╛ рдЖрдХрд╛рд░ рд╣рдореЗрд╢рд╛ рд╕рдорд╛рди рд╣реЛрддрд╛ рд╣реИ - рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ 100% рд╕реБрдирд┐рд╢реНрдЪрд┐рддред

рдЗрд╕рдХрд╛ рд╕рднреА рд╢реВрдиреНрдп/рдЕрдиреБрдкрд▓рдмреНрдз рд╕реБрд╡рд┐рдзрд╛рдУрдВ рд╡рд╛рд▓реА рдкрдВрдХреНрддрд┐рдпреЛрдВ рд╕реЗ рдХреБрдЫ рд▓реЗрдирд╛-рджреЗрдирд╛ рд╣реИред
рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрджрд┐ рдЖрдк рдбреЗрдЯрд╛рдлрд╝реНрд░реЗрдо рд╕реЗ рд╕рднреА рд╢реВрдиреНрдп рд╕реБрд╡рд┐рдзрд╛рдУрдВ рд╡рд╛рд▓реА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рддреЗ рд╣реИрдВ - рддреЛ рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

@ranInc рдХреНрдпрд╛ рдЖрдк рдореЙрдбрд▓ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреВрд░реНрдг рд╕реНрдХреИрд▓рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдкреЛрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдпрд╣ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдореЙрдбрд▓ рдХреЛ рдПрдХ рд╣реА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд╕рд╛рде рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдорджрдж рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдб рдмрд╣реБрдд рд╕рд╛рдорд╛рдиреНрдп рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдХреБрдЫ рдкреНрд░реЛрдкрд╛рдЗрдЯрд░реА рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдорд░ рд╣реИрдВ,
рдХреЛрдб рд╣реА рдЬреНрдпрд╛рджрд╛рддрд░ рдкрд╛рдЗрд╕реНрдкрд╛рд░реНрдХ рд╣реИ рдФрд░ рд╕реНрдХреИрд▓рд╛ рдирд╣реАрдВред

рдпрд╣ рджреЗрдЦрдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдХреЗрд╡рд▓ рд╕рднреА рд╢реВрдиреНрдп рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдирд╛ рдФрд░ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ - рдпрд╣ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдЖрдк рд╕рднреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рднреА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╡рд┐рднрд╛рдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдлрд╝реНрд░реЗрдо рдХреЛ рдкреБрди: рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

@ranInc рдореИрдВрдиреЗ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╢реВрдиреНрдп рд╕реЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд┐рдпрд╛ рдФрд░ рдЕрднреА рднреА рдЙрд╕реА рддреНрд░реБрдЯрд┐ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИ ( java.lang.NullPointerException ):

...
df.na.drop(minNonNulls = 1)
...

рдХреНрдпрд╛ рдпрд╣ рдХрд░рдиреЗ рдХрд╛ рдпрд╣ рд╕рд╣реА рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ?

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдорджрдж рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдб рдмрд╣реБрдд рд╕рд╛рдорд╛рдиреНрдп рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдХреБрдЫ рдкреНрд░реЛрдкрд╛рдЗрдЯрд░реА рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдорд░ рд╣реИрдВ

рдореИрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдФрд░ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреЗ рд╕рдордп рдХрд┐рддрдиреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢

ml.dmlc.xgboost4j.java.XGBoostError: [00:36:10] /workspace/src/learner.cc:1179: рдЪреЗрдХ рдлреЗрд▓: Learning_model_param_.num_feature >= p_fmat->Info().num_col_ (1 рдмрдирд╛рдо 2) : рд╕реНрддрдВрднреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмреВрд╕реНрдЯрд░ рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреАред

рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдореЙрдбрд▓ рдХреЛ рдПрдХ рд╣реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рджреЛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХреА рдЬрд╛ рд░рд╣реА рд╣реИред

рдЕрднреА, рдореЗрд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдбреЗрдЯрд╛ рдлрд╝реНрд░реЗрдо рдФрд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЕрдкрд▓реЛрдб рдХрд┐рдП рдЧрдП рдХреНрд░рдордмрджреНрдз рдореЙрдбрд▓ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИред рдореЙрдбрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдореЗрдВ рдХреНрдпрд╛ рд╣реБрдЖ рдФрд░ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реБрдЖ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдореБрдЭреЗ рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐ рдХреА рдХрдореА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдореБрдЭреЗ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдирд┐рд╡рд╛рд░рдг рдХрд░рдиреЗ рдореЗрдВ рдмрд╛рдзрд╛ рдЖ рд░рд╣реА рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдХреБрдЫ рдорд╛рд▓рд┐рдХрд╛рдирд╛ рдЬрд╛рдирдХрд╛рд░реА рд╣реИ, рддреЛ рдХреНрдпрд╛ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?

  1. рдирд╣реАрдВ, рдЖрдк рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
import org.apache.spark.ml.linalg.{SparseVector, Vector}
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions.{callUDF, col}
.......
 val isVectorAllZeros = (col: Vector) => {
        col match {
          case sparse: SparseVector =>
            if(sparse.indices.isEmpty){
              true
            }else{
              false
            }
          case _ => false
        }
      }

      spark.udf.register("isVectorAllZeros", isVectorAllZeros)
      df = df.withColumn("isEmpty",callUDF("isVectorAllZeros",
        col("features_6620294785024229130"))).where("isEmpty == false")

рдЖрдк рдЗрд╕ рддрд░рд╣ рдбреЗрдЯрд╛рдлреНрд░реЗрдо рдХреЛ рдлрд┐рд░ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

....
df = df.repartition(1)
....
  1. рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдХреЛрдб рдЖрдкрдХреЛ рдЬреНрдпрд╛рджрд╛ рдирд╣реАрдВ рджреЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡реЗрдХреНрдЯрд░ рдЕрд╕реЗрдВрдмрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЖрдк рдпрд╣ рдирд╣реАрдВ рдЬрд╛рди рдкрд╛рдПрдВрдЧреЗ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рддрдиреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛,
    рд▓реЗрдХрд┐рди рдореБрдЭреЗ 100% рдпрдХреАрди рд╣реИ рдХрд┐ рдЗрд╕рдиреЗ рд╕рдорд╛рди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдореБрдЭреЗ 100% рдпрдХреАрди рд╣реИ рдХрд┐ рдЗрд╕рдиреЗ рд╕рдорд╛рди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред

рдЖрдкрдиреЗ рдпрд╣ рдХреИрд╕реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛, рдпрджрд┐ рд╡реЗрдХреНрдЯрд░ рдЕрд╕реЗрдВрдмрд▓рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ?

рд╡реЗрдХреНрдЯрд░ рдЕрд╕реЗрдВрдмрд▓рд░ рд╣рдореЗрд╢рд╛ рд╕рдорд╛рди рдорд╛рддреНрд░рд╛ рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдмрдирд╛рддрд╛ рд╣реИ, рдЗрд╕реЗ рд╣рдерд┐рдпрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рд╕реНрддрдВрднреЛрдВ рдХреЗ рдирд╛рдореЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдЬрд╛рд░реЛрдВ рдореЙрдбрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рд╕рд╛рдорд╛рдиреНрдп рд╣реИ рдФрд░ рдореВрд▓ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╛рдореЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рдореЙрдбрд▓ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдЖрдкрдХреЛ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдбреЗрдЯрд╛рдлреНрд░реЗрдо рднреЗрдЬ рд╕рдХрддрд╛ рд╣реВрдВ - рдпрд╛ рдХреЛрдИ рдЕрдиреНрдп рдбреЗрдЯрд╛ рдЬреЛ рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдПред
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдореЗрдВ рдореЗрд░реЗ рд▓рд┐рдП рд╕рдордп рд▓рдЧреЗрдЧрд╛ рдФрд░ рдпрджрд┐ рдЖрдк рдЬреЛ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рджрд┐рдЦрд╛рдпрд╛ рд╣реИ рдЙрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдореЙрдбрд▓ 2 рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

@ranInc рдореБрдЭреЗ рдПрдХ рдФрд░ рдкреНрд░рд╢реНрди рдкреВрдЫрдиреЗ рджреЗрдВ: рдХреНрдпрд╛ рдпрд╣ рдХрд╣рдирд╛ рд╕рд╣реА рд╣реИ рдХрд┐ рдЙрджрд╛рд╣рд░рдг рдбреЗрдЯрд╛ рдореЗрдВ рдПрдХ рд╡рд┐рд░рд▓ рд╕реНрддрдВрдн (рд╡реЗрдХреНрдЯрд░ рдЕрд╕реЗрдВрдмрд▓рд░) рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЕрдзрд┐рдХрддрдо рджреЛ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ ?

рдирд╣реАрдВред
рд╡реЗрдХреНрдЯрд░ рдЕрд╕реЗрдВрдмрд▓рд░ рдПрдХ рдЯреНрд░реИрд╕рдлреЙрд░реНрдорд░ рд╣реИ рдЬреЛ рдХрдИ рдХреЙрд▓рдо рдкрдХрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╡реЗрдХреНрдЯрд░ рдХреЙрд▓рдо рдореЗрдВ рд░рдЦрддрд╛ рд╣реИред
рд╡реЗрдХреНрдЯрд░ рд╣рдореЗрд╢рд╛ рд╕реНрдкрд╛рд░реНрдХ рдореЗрдВ рдлрд┐рдЯрд┐рдВрдЧ рдФрд░ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдпрд╣рд╛рдВ рдЙрджрд╛рд╣рд░рдг рдбреЗрдЯрд╛рдлреНрд░реЗрдо рдореЗрдВ рдПрдХ рд╡реЗрдХреНрдЯрд░ рдХреЙрд▓рдо рд╣реИред
рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рд╡рд┐рд░рд▓ рд╣реИрдВ, рдЕрдиреНрдп рдШрдиреА рд╣реИрдВ - рд╕рднреА рдореЗрдВ рджреЛ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВред

@ranInc рддреЛ рд╕рднреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рджреЛ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ, рдХреБрдЫ рдорд╛рди рдЧрд╛рдпрдм рд╣реИрдВ рдФрд░ рдЕрдиреНрдп рдирд╣реАрдВ рд╣реИрдВред рд╕рдордЭ рд▓рд┐рдпрд╛ред рдореИрдВ рдЦрд╛рд▓реА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХреЗ рд╕реБрдЭрд╛рд╡ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рд╣реЛрдЧрд╛, рдореИрдВ рд╕реНрдкрд╛рд░реНрдХ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдирдпрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдбрд┐рдмрдЧрд┐рдВрдЧ рдкреНрд░рдпрд╛рд╕ рдХрд╛рдлреА рдХрдард┐рди рд╕рд╛рдмрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЕрдзрд┐рдХ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕реНрдкрд╛рд░реНрдХ рдФрд░ рд╕реНрдХрд╛рд▓рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рдРрд╕реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдЬрд╛рдирддреЗ рд╣реИрдВ рдЬреЛ XGBoost рдХреЗ JVM рдкреИрдХреЗрдЬ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рд╣рдорд╛рд░реА рдорджрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рд╣рдореЗрдВ рдмрддрд╛рдПрдВред

@ranInc рдореИрдВрдиреЗ рдЖрдкрдХреЗ рд╕реБрдЭрд╛рд╡ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЦрд╛рд▓реА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛:

рдкреНрд░реЛрдЧреНрд░рд╛рдо рдП: рдЙрджрд╛рд╣рд░рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдЦрд╛рд▓реА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд┐рдП рдмрд┐рдирд╛

import org.apache.spark.sql.SparkSession
import org.apache.spark.ml.{Pipeline, PipelineModel}
import org.apache.spark.ml.linalg.{SparseVector, Vector}
import org.apache.spark.sql.functions.{callUDF, col}

object Main extends App {
  val spark = SparkSession
      .builder()
      .appName("XGBoost4J-Spark Pipeline Example")
      .getOrCreate()

  val df = spark.read.parquet("/home/ubuntu/data/6620294785024229130_features").repartition(200).persist()
  df.show()

  val model = PipelineModel.read.load("/home/ubuntu/data/6620294785024229130_model_xg_only")

  val predictions = model.transform(df)

  predictions.persist()
  predictions.count()
  predictions.show()
}

рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмреА: рдЦрд╛рд▓реА рдкрдВрдХреНрддрд┐ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг

import org.apache.spark.sql.SparkSession
import org.apache.spark.ml.{Pipeline, PipelineModel}
import org.apache.spark.ml.linalg.{SparseVector, Vector}
import org.apache.spark.sql.functions.{callUDF, col}

object Main extends App {
  val spark = SparkSession
      .builder()
      .appName("XGBoost4J-Spark Pipeline Example")
      .getOrCreate()

  val isVectorAllZeros = (col: Vector) => {
    col match {
      case sparse: SparseVector => (sparse.indices.isEmpty)
      case _ => false
    }
  }
  spark.udf.register("isVectorAllZeros", isVectorAllZeros)

  val df = spark.read.parquet("/home/ubuntu/data/6620294785024229130_features").repartition(200).persist()
                .withColumn("isEmpty", callUDF("isVectorAllZeros", col("features_6620294785024229130")))
                .where("isEmpty == false")
  df.show()

  val model = PipelineModel.read.load("/home/ubuntu/data/6620294785024229130_model_xg_only")

  val predictions = model.transform(df)

  predictions.persist()
  predictions.count()
  predictions.show()
}

рдХреБрдЫ рдЕрд╡рд▓реЛрдХрди

  • рд╕реНрдерд┐рд░ 1.2.0 рд░рд┐рд▓реАрдЬ рдХреЗ рд╕рд╛рде, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдП рддреНрд░реБрдЯрд┐рдпрд╛рдБ java.lang.NullPointerException рдХреЗ рд╕рд╛рдеред рдПрдирдкреАрдИ рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ, рд╕реНрдкрд╛рд░реНрдХ рдирд┐рд╖реНрдкрд╛рджрди рд▓реЙрдЧ рдореЗрдВ рдирд┐рдореНрди рдЪреЗрддрд╛рд╡рдиреА рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреА рд╣реИ:
WARNING: /xgboost/src/learner.cc:979: Number of columns does not match number of features in booster. Columns: 0 Features: 1
  • рд╕реНрдерд┐рд░ 1.2.0 рд░рд┐рд▓реАрдЬ рдХреЗ рд╕рд╛рде, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмреА рдмрд┐рдирд╛ рдХрд┐рд╕реА рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░рд╛ рд╣реЛрддрд╛ рд╣реИред
  • рд╡рд┐рдХрд╛рд╕ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде (рдирд╡реАрдирддрдо master рд╢рд╛рдЦрд╛, рдкреНрд░рддрд┐рдмрджреНрдз 42d31d9dcb6f7c1cb7d0545e9ab3a305ecad0816), рдкреНрд░реЛрдЧреНрд░рд╛рдо A рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо B рджреЛрдиреЛрдВ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ:
[12:44:57] /home/ubuntu/xgblatest/src/learner.cc:1179: Check failed: learner_model_param_.num_feature >= p_fmat->Info().num_col_ (1 vs. 2) : Number of columns does not match number of features in booster.                                                                                                        
Stack trace:                                                                                                                                   
  [bt] (0) /tmp/libxgboost4j14081654332866852928.so(dmlc::LogMessageFatal::~LogMessageFatal()+0x79) [0x7f7ef62c4e19]                             [bt] (1) /tmp/libxgboost4j14081654332866852928.so(xgboost::LearnerImpl::ValidateDMatrix(xgboost::DMatrix*, bool) const+0x20b) [0x7f7ef63f5f0b]                                                                                                                                              
  [bt] (2) /tmp/libxgboost4j14081654332866852928.so(xgboost::LearnerImpl::Predict(std::shared_ptr<xgboost::DMatrix>, bool, xgboost::HostDeviceVector<float>*, unsigned int, bool, bool, bool, bool, bool)+0x3c3) [0x7f7ef6400233]                                                             
  [bt] (3) /tmp/libxgboost4j14081654332866852928.so(XGBoosterPredict+0xec) [0x7f7ef62caa3c]                                                      [bt] (4) /tmp/libxgboost4j14081654332866852928.so(Java_ml_dmlc_xgboost4j_java_XGBoostJNI_XGBoosterPredict+0x47) [0x7f7ef62befd7]             
  [bt] (5) [0x7f80908a8270]

рдЬреЛ рдЕрдЬреАрдм рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ @ranInc рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдореЙрдбрд▓ рдХреЛ рджреЛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

  • рдореИрдВрдиреЗ рд╕реНрд░реЛрдд рд╕реЗ рд╕рдВрд╕реНрдХрд░рдг 1.2.0-SNAPSHOT рдмрдирд╛рдпрд╛ (рдкреНрд░рддрд┐рдмрджреНрдз 71197d1dfa27c80add9954b10284848c1f165c40)ред рдЗрд╕ рдмрд╛рд░, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдП рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмреА рджреЛрдиреЛрдВ рд╣реА рдлреАрдЪрд░ рдмреЗрдореЗрд▓ рддреНрд░реБрдЯрд┐ ( learner_model_param_.num_feature >= p_fmat->Info().num_col_ (1 vs. 2) : Number of columns does not match number of features in booster ) рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред
  • рд╕реНрдерд┐рд░ 1.2.0 рд╕рдВрд╕реНрдХрд░рдг рдФрд░ 1.2.0-SNAPSHOT рдХреЗ рдмреАрдЪ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЕрдВрддрд░ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдерд╛ рдФрд░ рдореБрдЭреЗ рдХрд╛рдлреА рдкрд░реЗрд╢рд╛рди рдХрд░рддрд╛ рдерд╛ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, 1.2.0 . рд╕реЗ рдЪреЗрддрд╛рд╡рдиреА рд╕рдВрджреЗрд╢
WARNING: /xgboost/src/learner.cc:979: Number of columns does not match number of features in booster. Columns: 0 Features: 1

рд╕реА ++ рдХреЛрдбрдмреЗрд╕ рдХреЗ 1.2.0 рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЪреЗрддрд╛рд╡рдиреА release_1.0.0 рд╢рд╛рдЦрд╛ рдореЗрдВ рдорд┐рд▓рддреА рд╣реИ:
https://github.com/dmlc/xgboost/blob/ea6b117a5737f5beb2533fc89b3f3fcd72ecc04e/src/learner.cc#L972 -L982
рддреЛ рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдорд╛рд╡реЗрди рд╕реЗрдВрдЯреНрд░рд▓ рдкрд░ 1.2.0 JAR рдлрд╝рд╛рдЗрд▓ рдореЗрдВ 1.0.0 рд╕реЗ libxgboost4j.so рд╣реИ ?? рдореИрдВ

  • рджрд░рдЕрд╕рд▓, рдорд╛рд╡реЗрди рд╕реЗрдВрдЯреНрд░рд▓ рдХреА 1.2.0 JAR рдлрд╝рд╛рдЗрд▓ рдореЗрдВ libxgboost4j.so рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ 1.0.0 (!!!) рд╣реИред рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдорд╛рд╡реЗрди рд╕реЗрдВрдЯреНрд░рд▓ рд╕реЗ xgboost4j_2.12-1.2.0.jar рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ libxgboost4j.so рдлрд╝рд╛рдЗрд▓ рдирд┐рдХрд╛рд▓реЗрдВред рдлрд┐рд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдкрд╛рдпрдерди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдПрдБ:
import ctypes

lib = ctypes.cdll.LoadLibrary('./libxgboost4j.so')

major = ctypes.c_int()
minor = ctypes.c_int()
patch = ctypes.c_int()

lib.XGBoostVersion(ctypes.byref(major), ctypes.byref(minor), ctypes.byref(patch))
print((major.value, minor.value, patch.value))  # prints (1, 0, 2), indicating version 1.0.2
  • 1.0.0 рдореБрджреНрджрд╛ рдПрдХ рддрд░рдл, рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд XGBoost рдореЙрдбрд▓ рдиреЗ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ ( learner_model_param_.num_feature == 1 ) рдХреЛ рдорд╛рдиреНрдпрддрд╛ рджреА рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛ рдореЗрдВ рдПрдХ рдРрд╕реА рд╕реБрд╡рд┐рдзрд╛ рд╣реЛ рдЬреЛ 100% рдЦрд╛рд▓реА рдереА ?? @ranInc

рдХреНрдпрд╛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдореИрдВ рдореЙрдбрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛рдлреНрд░реЗрдо рдХреЛ рдкрдХрдбрд╝ рд▓реВрдВ?
рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рдкрдХрдбрд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕реНрдХреИрд▓рд╛ рдХреЛрдб рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ рдореЙрдбрд▓ рдмрдирд╛рддрд╛ рд╣реИред

@ranInc рдореЗрд░рд╛ рд╕рдВрджреЗрд╣ рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛ рдореЗрдВ рджреЛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓рд╛рдкрддрд╛ рдорд╛рди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, learner_model_param_.num_feature рдХреЛ 1 рдкрд░ рд╕реЗрдЯ рдХрд░рдирд╛ред рддреЛ рд╣рд╛рдБ, рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛ рджреЗрдЦрдирд╛ рдмрд╣реБрдд рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛ред

рдареАрдХ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдХрд▓ рддрдХ рддреИрдпрд╛рд░ рдХрд░ рд▓реВрдБрдЧрд╛ред

рдмреЗрдореЗрд▓ libxgboost4j.so рдХреЗ рдореБрджреНрджреЗ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП #6426 рдмрдирд╛рдпрд╛ рдЧрдпрд╛ред рдпрд╣рд╛рдВ (#5957) рдЖрдЗрдП рдЪрд░реНрдЪрд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ learner_model_param_.num_feature рдХреЛ 1 рдкрд░ рдХреНрдпреЛрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЧрд▓рдд рд╣реИрдВ, рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛ рдореЗрдВ рдХреЛрдИ рдЧреБрдо рдорд╛рди рдирд╣реАрдВ рд╣реИред
рдпрд╣рд╛рдВ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдкрд░, рд╡рд┐рдлрд▓рддрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрди: рд╡рд┐рднрд╛рдЬрди рдкрд░ рд░рд┐рд▓реЗ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдореИрдВрдиреЗ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдкрдВрдХреНрддрд┐ (рдЬрд┐рд╕рдореЗрдВ рдХреЗрд╡рд▓ рд╢реВрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред

features_creation.zip

import ml.dmlc.xgboost4j.scala.spark.XGBoostRegressor
import org.apache.spark.ml.Pipeline
import org.apache.spark.sql.SparkSession
import org.apache.spark.ml.PipelineModel
import org.apache.spark.sql.DataFrame

val df = spark.read.parquet("/tmp/6620294785024229130_only_features_creation").persist()
df.count()

val regressor = new XGBoostRegressor()
    .setFeaturesCol("features_6620294785024229130")
    .setLabelCol("label_6620294785024229130")
    .setPredictionCol("prediction")
    .setMissing(0.0F)
    .setMaxDepth(3)
    .setNumRound(100)
    .setNumWorkers(1)

val pipeline = new Pipeline().setStages(Array(regressor))
val model = pipeline.fit(df)

val pred = spark.read.parquet("/tmp/6620294785024229130_features").persist()
pred.count()
pred.where("account_code == 4011593987").show()
model.transform(pred.where("account_code == 4011593987")).show()
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

vkuznet picture vkuznet  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

wenbo5565 picture wenbo5565  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

yananchen1989 picture yananchen1989  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

frankzhangrui picture frankzhangrui  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

XiaoxiaoWang87 picture XiaoxiaoWang87  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ