반응형

파이썬에서 간단하게 랜덤 스트링 만들기



import string
import random

def random_string(size=6, chars=string.ascii_lowercase+string.digits):
return ''.join(random.choice(chars) for _ in range(size))



print( random_string(6) )
print( random_string(6) )
print( random_string(6) )

-위 함수에 파라미터로 랜덤스트링 길이를 넣어주면 된다.

-random.choice()는 내부에 아무 원소를 랜던하게 하나 뽑아준다.

-chars는 아래 정의된 값들을 사용.

-string.ascii_lowercase

Out[5]: 'abcdefghijklmnopqrstuvwxyz'

-string.digits

Out[6]: '0123456789'




반응형


+matplotlib subplot 화면분할 grid로 분할하기

HTML의 테이블의 TR, TD, colspan, rowspan 하듯이 그리드로 서브 플롯을 구성할 수 있다.


예제)

import matplotlib.pyplot as plt

import numpy as np


plt.figure(figsize=(15,8))

plt.subplots_adjust(hspace=0.5, wspace=0.4)

gridshape=(4,3)
loc=(0,0)

plt.subplot2grid(gridshape, loc, colspan=2)
plt.plot(np.arange(0,10,1), np.random.randint(0,10,10))

loc=(0,2)
plt.subplot2grid(gridshape, loc, rowspan=2)
plt.plot(np.arange(0,10,1), np.random.randint(0,10,10))

loc=(1,0)
plt.subplot2grid(gridshape, loc)
plt.plot(np.arange(0,10,1), np.random.randint(0,10,10))

loc=(1,1)
plt.subplot2grid(gridshape, loc )
plt.plot(np.arange(0,10,1), np.random.randint(0,10,10))

loc=(2,0)
plt.subplot2grid(gridshape, loc)
plt.plot(np.arange(0,10,1), np.random.randint(0,10,10))

loc=(2,1)
plt.subplot2grid(gridshape, loc)
plt.plot(np.arange(0,10,1), np.random.randint(0,10,10))

loc=(2,2)
plt.subplot2grid(gridshape, loc)
plt.plot(np.arange(0,10,1), np.random.randint(0,10,10))

loc=(3,0)
plt.subplot2grid(gridshape, loc, colspan=3)
plt.plot(np.arange(0,10,1), np.random.randint(0,10,10))


plt.show()


결과)





'Python' 카테고리의 다른 글

[Python] enum  (0) 2019.03.28
랜덤스트링 만들기  (0) 2019.03.22
File I/O, Directory list, read/write  (0) 2018.07.04
WebAPI thread work status  (0) 2018.07.03
Python BeautifulSoup 웹크롤링/HTML 파싱.  (0) 2018.04.25
반응형

+SVM (support vector machine)을 사용하여 간단하게 바이너리 분류하기


간단하게 말하면 가장 마진이 크도록 최적의 구분 라인 긋기. 약간의 판단 오류가 있더라면 데이터의 밀집 분포 정도에 따라 최적의 라인은 다를 수 있다. 판단오류가 하나도 없도록(과적합) 구분 라인을 만들면 오히려 임의의 값 예측시 정확도가 더 떨어질 수 있다. 


X 데이터 : 피쳐2개. 

Y데이터 : 라벨 (0, 1) binary 분류값.

SVM으로 최적 구분 라인 계산.

임의의 값에 대해 Y데이터 예측하기.


from sklearn.svm import SVC
import matplotlib.pyplot as plt
import numpy as np

# line split SVM

X = np.array([[1,2],
[5,8],
[1.5,1.8],
[8,8],
[1,0.6],
[9,11]])
y = [0,1,0,1,0,1]
clf = SVC(kernel='linear'1.0# C is error penalty. if C is bigger then more strictly but margin will be narrow...
clf.fit(X,y)
print(clf.predict([[0.58,0.76]]))
print(clf.predict([[10.58,10.76]]))

w = clf.coef_[0]
print(w)
a = -w[0] / w[1]

xx = np.linspace(0,12)
yy = a * xx - clf.intercept_[0] / w[1]

h0 = plt.plot(xx, yy, 'k-'label="non weighted div")

plt.scatter(X[:, 0], X[:, 1], = y)
plt.legend()
plt.show()

[해설]
x데이터의 벡터는 2차원이고 구분 레이블은 y로 0, 1로 두 그룹으로 나눈다.
SVC의 리턴값으노 clf로 피팅을 하게 되면
clf.predict()로 입력값 x에 대한 구분 레이블 y를 예측할 수 있다.

x데이터의 벡터요소(피쳐)를 x0, x1라 하면
새로운 좌표계의 1차원 좌표축을 z라하면
z = f (x0, x1) 
z>=0 이면 레이블1, z<0이면 레이블 0가 될 것이다. (z=0이면 1일까? 맞다.)

clf의 coef_로 w0, w1를 얻고, intercept로 b를 얻는다.
w0, w1는 입력값의 가중치. b 는 bias

z = w0*x0+w1*x1 + b 가 된다.
따라서 위 라인 (z=0으로 놓는다.)을 기준으로 분류한다.

위 라인을 x1(Y축)에 대해 정리하면
기울기는 -w0/w1
y절편은 -b/w1가 된다.
이 라인이 구분선이 된다.





+ Recent posts