세계 인구 예측

개시하다


이번에는 SVM을 이용해 세계 인구를 예측하려고 한다.
앞서 나는 한 편의 문장세계 경제를 예측하다을 썼는데 이것은 한 번의 함수가 SVM에 적용되는 것이 의미가 없다고 생각하기 때문에 좋은 제재를 찾았다.
세계 인구가 최근 몇 년 동안 급격히 증가하여 일반적으로 한 번의 함수는 적용되지 않는다고 여긴다.

데이터를 얻다


데이터
이쪽 pdf에 세계 인구의 추이가 기록되어 있기 때문에 이걸 사용합니다.
이번에 낡은 데이터를 포함하면 공부가 잘 안 돼요. 1850년.
이전 데이터는 포함되지 않습니다.

가공


학습 파일의 형식은
年度,人口
年度,人口
...
누르십시오.

주의


한 번 보면 이 문서의 인구 단위는 10억 명이라는 것을 알 수 있다.

실행


소스 코드.
세계 경제를 예측하다를 바탕으로 제작되었습니다.
import sys
from sklearn.svm import SVC
from sklearn import svm
import numpy as np
import copy
import matplotlib.pyplot as plt
from sklearn.model_selection import GridSearchCV
from sklearn.kernel_ridge import KernelRidge
from sklearn.metrics.pairwise import rbf_kernel
from sklearn.linear_model import Ridge


args = sys.argv


def regression_main():
     # model = svm.SVR(kernel='rbf', C=1e3, gamma=0.1)
      data=[]
      with open(args[1],"r",encoding="utf-8") as f:
           data=[e.replace("\n", "") for e in f.readlines()]
           data=[[float(e) for e in e.split(",")] for e in copy.deepcopy(data) ]

      in_data=[e[:-1] for e in data]
      label_data=[e[-1] for e in data]

      print(in_data,label_data)

      tuned_parameters = [
        {'kernel': ['rbf'], 'gamma': [10**i for i in range(-6, 6)], 'C': [3]}#,
     #   {'kernel': ['linear'], 'C': [1, 10, 100, 1000]}
      ]

     # model = GridSearchCV(svm.SVR(), tuned_parameters,  verbose=1,cv=5, scoring="mean_squared_error")
      model =svm.SVR(kernel='rbf',gamma=0.00001,C=1e3)


      model.fit(in_data,label_data)


      plt.scatter([e[0] for e in in_data], [e for e in label_data])
      test_in_data=[[e] for e in range(int(min([e[0] for e in in_data])),int(max([e[0] for e in in_data])),1)]
#      test_in_data=[[e] for e in range(2100)]
      plt.plot([e[0] for e in test_in_data], model.predict(test_in_data))
      plt.show()

      while True:
          user_input=input("end?>")
          if user_input=="end":break
          user_in_data=[]
          for i in range(len(in_data[0])):
               t=float(input(">"))
               user_in_data.append(t)

          print(model.predict([user_in_data])[0])



def main():
     print("1:label\n2:回帰")
     n=int(input(">"))     
     if n==1:
         #label_main()
     if n==2:
         regression_main()


위 작업을 수행한 후

이렇게 됐어.
일차 함수는 적용되지 않습니다.

예상하다


2050을 입력해 보세요.
결과는 10.8245358213이었다.(단위: 10억명, 즉 108억2천453만5천821명)
유엔의 전망에 따르면 98억 명으로 오차가 있지만 예상할 수 있다.

총결산


이번에는 SVM을 사용하라는 의미가 있습니다.
하지만 이 모델은 2100년을 제대로 예상하지 못했다.

좋은 웹페이지 즐겨찾기