I can do it!!

He can do! She can do! why cannot me? i can do it!

개발/sk infosec cloud ai 전문가 양성과정

[PYTHON데이터분석 2020/09/02] SK infosec 클라우드 AI 전문가 양성과정 수업필기본

gogoriver 2020. 9. 7. 22:25
20200902

SVM 힌트 및 설명

  • 결과 정확도가 떨어지는 경우가 많다.
  • 추가 작업 가능하다면 해봐라
  • SVM은 경계선을 찾아서 제한된 조건을 구분한다. 앞과 같이 데이터를 양분할 때 주로 사용된다.
  • 파라미터 중에서 C파라미터를 이용해 마진 오류의 균형을 맞춘다. 예를 들어 양분화되어있는 선이 있다고 했을 때 임의의 값이 틀릴 경우 마진의 오류라고 하는데 이게 완벽할 수 없고 오류가 발생할수도 있다.
  • 마진이라는 것은 둘 사이의 거리가 작아진다는 이야기인데,C가 크다면 마진의 크가기 작아지고, 마진의 오류도 작아진다. 반대로 C가 작다면 마진의 크기가 커지고 마진 오류도 커진다.

  • SVM모델이 과대적합이면 C를 감소시켜서 조금 더 유연한 모델로 만들고, 과소적합이면 C를 증가시켜서 조금 더 타이트한 모델을 만들어서 제공할 수 있다!

  • 정확도가 떨어진 때 계산 요소

    1. 학습 데이터를 교체하거나 바꾼다
    2. 알고리즘을 아예 바꾼다.
    3. 알고리즘의 하이퍼 파라미터를 변경한다.

  • YES / NO를 찾을 때 서포트 백터를 많이 사용한다.
  • 10개의 데이터 중에서 하나를 고를 때 입력 파라미터는 784개나 된다.
  • 따라서 SVM을 MNIST에 적용하려면 가지고 있는 SPECTRUM을 0->1로 바꾸거나 하는 게 중요하다.
  • 즉 StandardScaler. MinMaxScaler등으로 데이터 스케일링을 해보거라
  • 즉 서포트백터는 마진을 찾는 게 중요하고, 마진 이외의 데이터 위치는 중요하지 않다! 따라서 데이터가 있었다, 없었다가 중요하다!
  • 따라서 SCALER를 조정해봐라

PANDAS

loc. iloc

In [ ]:
import pandas as pd

data = ['a','b','c','d','e']
df = pd.DataFrame(data)
df.drop([2], inplace = True)
df
Out[ ]:
0
0 a
1 b
3 d
4 e
  • 원본 데이터에 반영을 시켜주기 위해서는 drop을 할 때 inplace를 해줘야 한다
In [ ]:
# df.loc[2] # 2번 인덱스가 삭제가 되어서 열람할 수 없다
df.loc[[1,3]]

# 행의 위치를 가지고 올 경우
df.iloc[[1,2]]
Out[ ]:
0
1 b
3 d

pandas csv

  • 데이터 읽는 법
    • pd.read_csv()
  • 데이터 상위 값
    • df.head()
  • 데이터 하위 값
    • df.tail()

pandas를 사용하지 않을 때 csv와 excel 처리하기

  • pandas를 사용하지 않고 csv나 excel을 읽을 수 있다
  • 그러나 그렇게 될 경우 코드가 더 길어진다.

  • 꼭 기억하기!!

    • drop에는 index=1이나, replace =true를 해줘야한다,
  • 6장에서 TXT, CSV 파일 읽어오는 과정이 있음

In [8]:
ser1 = {1,2,4,5,6}
print(type(ser1))
import pandas as pd

df= pd.DataFrame(ser1)
df
<class 'set'>
Out[8]:
0
0 1
1 2
2 4
3 5
4 6

csv

csv란?

  • 콤마로 구분된 value들이다.
  • csv가 아닌 파일을 csv로 변환하여 dataframe으로 읽기 위해서는 option으로 determeter 을 사용해야한다
  • header가 없는 파일의 경우 header = None 을 해줘야한다.
  • 또는 header(columns)나 index 미사용시에는 header=False, index = False 를 해줘야한다.

none값 처리하기

  • Nan값은 비어있는 값으로 나온다.
  • 이러한 값을 따로 형식을 지정하고 싶을 경우 na_rep='-' 를 사용하면 된다.

특정 값 filtering

  • df[[column1, column2]]
  • 복수의 컬럼을 가지고 오고 싶을 경우 []을 한번 더 써준다.
  • 슬라이싱 df[3:5] 을 사용하거나, ioc, iloc를 사용할 수도 있다.
  • query를 이용할수도 있다.

  • unique()는 유일한 값만을 return한다

  • filter을 사용하여 조작할수도 있다. Subset the dataframe rows or columns according to the specified index labels.
  • filter의 경우 items로 원하는 컬럼을 가져올 수 있고, regex로 정규표현식을 통해 값을 가져올 수 있다. 또한 like를 통해 원하는 값이 포함된 것을 가져올 수 있다.
  • option으로 axis = 0,1을 선택하여 filtering할 값이 column인지 row인지 확인할 수 있다.

  • boolean 값을 만들어서 이것을 df[boolean값]하면 boolean중 true의 값만 가지고 올 수 있다. 꽤 편하고 유용한듯 해서 앞으로 자주 사용해야겠다.


* query함수의 6가지 기능
    - 비교 연산자( ==, >, >=, <, <=, != )
    - in 연산자( in, ==, not in, != )
    - 논리 연산자(and, or, not)
    - 외부 변수(또는 함수) 참조 연산
    - 인덱스 검색
    - 문자열 부분검색( str.contains, str.startswith, str.endswith )

* filte란?
    - filter는 입력받은 각 요소를 함수로 수행 후 ture인 것만 묶어서 반환한다.
    - 그래서 filter내에는 함수, 또는 lambda등이 들어갈 수 있다.
    - 내장함수로는 items, regex, like가 있다.
    - 특히 regex는 정규표현식과 자주 쓰이니 공부하기
    - [정규표현식 강의](https://programmers.co.kr/learn/courses/11)