회귀 논리(비망록)
9172 단어 Python
논리 회귀와 논리 링크 함수
확률 분포에 이원 분포(Binomial Distribution)를 지정하고, 링크 함수에 논리 링크 함수를 지정하는 광의선형 모델(GLM)은 논리 회귀다.
이항식 분포 중 이벤트 발생 확률 $pi$p 지정 필요i$값의 범위 0≥$pi$≥1(확률 0~100%의 범위)을 나타내는 데 적합한 링크 함수는 논리적 링크 함수입니다.
논리 함수
논리 링크 함수는 논리 함수의 역함수다.논리 함수는 다음과 같은 공식으로 표시된다.
$z_i달러는 선형 예측기 $zi=α_1+β_1x_1+β_2x_2…$α:토막β_계수
$$ p_i=logistic(x_i)=\frac{1}{1+\exp(-z_i)} $$
논리 함수 그리기(동위원소 곡선)
상기 공식의 $z$-10이 변할 때의 곡선을 그려 보세요.
$z치가 어떻든 간에 0≥,-19019.;,-19889약;≥1이 적당하고 z=0p=0.5 주목!# -6~6の間で等間隔に1000個の値を取得
x = np.linspace(-10,10,1000)
# 1/(1+np.exp(-x)) がロジスティック関数
plt.plot(x, ( 1/(1+np.exp(-x))) )
plt.axvline(x=0, color='red', linestyle='dotted')
plt.axhline(y=0.5, color='red', linestyle='dotted')
plt.ylabel("確率(p)")
plt.xlabel("確率変数(z)")
plt.show()
다음 도표를 그립니다.
논리 링크 함수
논리 함수를 $z로 설정하기i$=의 모양이 되면 다음과 같다.
$$\log\frac{p_i}{1-p_i}=z_i $$
※ 그나저나 $zi=α_1+β_1x_1+β_2x_2…$α:토막β_계수
이 왼쪽을 논리 함수라고 부른다.이것은 바로 아래의 뜻이다.
$$ α_1+β_1x_1+β_2x_2… =\log\frac{p_i}{1-p_i} $$
회귀 논리를 통해 매개 변수를 평가하다
회귀 논리를 통해 파라미터를 평가하다.
(선형 조합 방정식(선형 예측기)의 절편 또는 각 계수*의 추정)
유사함수와 대수 유사함수는
$$ L(\beta_j)=\prod_i{}_n\mathrm{C}_rp_i^{y_i}(1-p_i)^{N_i-y_i} $$
양쪽의 대수를 취하면...
$$\log L({\beta_j})=\sum_i (\log {}_n\mathrm{C} _r+y_i\log(p_i)+(N_i-y_i)\log(1-p_i)) $$
이루어지다
데이터를 적절히 준비하다.# 説明変数となるデータを1項目用意
X_train_list = np.r_[np.random.normal(3 ,1, size=50), np.random.normal(-1,1,size=50)]
# 目的変数となるデータを用意
y_train_list = np.r_[np.ones(50),np.zeros(50)]
# データフレームに変換
df = pd.DataFrame(data=[X_train_list,y_train_list]).T
df.rename(columns={0:"X",1:"Y"}, inplace=True)
# 目的変数と説明変数を分ける
X_train = df[["X"]]
y_train = df[["Y"]]
display(X_train.head())
display(y_train.head())
X
0 5.207395
1 2.692299
2 1.560036
3 3.853632
4 4.804304
Y
0 1.0
1 1.0
2 1.0
3 1.0
4 1.0
sklearn.linear_model.LogiisticRegression의 경우
모형 제작
from sklearn.linear_model import LogisticRegression
# モデルのインスタンス化
model = LogisticRegression()
# 学習
model.fit(X_train,y_train)
예측 (플래그)
モデル名.predict(説明変数データ)
0과 1의 목록을 되돌려줍니다.기본적으로 임계값 0.5(=50%)를 초과하면 1로 설정하고 그렇지 않으면 0으로 설정합니다.
매개변수로 전송된 설명 변수 데이터가 DataFrame이 아니면 오류가 발생할 수 있습니다.만약 Seriese라면 틀렸을 거야.model.predict(X_train)
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
예측(확률)
モデル名.predict_proba(説明変数データ)
아라이 형식으로 0으로 분류된 확률, 1로 분류된 확률의 각 확률을 되돌려준다.model.predict_proba(X_train.iloc[0:10])
array([[2.63082246e-05, 9.99973692e-01],
[1.51340331e-02, 9.84865967e-01],
[2.12846522e-01, 7.87153478e-01],
[8.10623998e-04, 9.99189376e-01],
[7.30213967e-05, 9.99926979e-01],
[1.51565245e-02, 9.84843475e-01],
[6.95446239e-04, 9.99304554e-01],
[7.48031608e-02, 9.25196839e-01],
[1.88389023e-02, 9.81161098e-01],
[5.45899840e-04, 9.99454100e-01]])
참고로 출력만 1로 분류될 확률은モデル名.predict_proba(評価用の説明変数データ)[:, 1]
statsmodels.api의 상황
모형 제작
포인트는 sm입니다.add_constant(변수 데이터 설명)을 하지 않으면 회귀식의 절단이 나오지 않는 곳.import statsmodels.api as sm
# 定数項(切片)のために行う
X_train = sm.add_constant(X_train)
glm_binom = sm.GLM( y_train, X_train, family=sm.families.Binomial())
res = glm_binom.fit()
print(res.summary())
Generalized Linear Model Regression Results
==============================================================================
Dep. Variable: Y No. Observations: 100
Model: GLM Df Residuals: 98
Model Family: Binomial Df Model: 1
Link Function: logit Scale: 1.0000
Method: IRLS Log-Likelihood: -8.8540
Date: Thu, 25 Mar 2021 Deviance: 17.708
Time: 10:54:26 Pearson chi2: 48.1
No. Iterations: 8
Covariance Type: nonrobust
==============================================================================
coef std err z P>|z| [0.025 0.975]
------------------------------------------------------------------------------
const -3.1340 1.046 -2.995 0.003 -5.185 -1.083
X 3.3071 0.952 3.476 0.001 1.442 5.172
==============================================================================
예측
1로 분류될 확률을 되돌려줍니다.
preddict 이전에 매개 변수가 전달하는 설명 변수는 sm이다.add_constant (변수 데이터 설명) 를 하지 않으면 오류가 발생할 수 있습니다.モデル.predict(説明変数データ)
res.predict(X_train)
0 0.527843
1 0.999978
2 0.999281
3 0.997063
4 0.995389
...
95 0.001322
96 0.000229
97 0.004302
98 0.000940
99 0.000040
AIC의 출력
res.aic
statsmodels.formula.api의 상황
statsmodels.api보다 더 세밀하게 지정할 수 있습니까
모형 제작
formura에서 열거한 변수와 설명 변수
R처럼 "전체적으로 이 열과 이 열을 뽑아라!"이렇게 지목하면 안 돼요?import statsmodels.formula.api as smf
# 線形予測子を定義 「1+」は切片
formula = "Y~1+X"
# リンク関数を選択
link = sm.genmod.families.links.logit
# 誤差構造(損失関数)を選択
family = sm.families.Binomial(link=link)
mod = smf.glm(formula=formula, data=df, family=family )
result = mod.fit()
print(result.summary())
Generalized Linear Model Regression Results
==============================================================================
Dep. Variable: Y No. Observations: 100
Model: GLM Df Residuals: 98
Model Family: Binomial Df Model: 1
Link Function: logit Scale: 1.0000
Method: IRLS Log-Likelihood: -8.8540
Date: Thu, 25 Mar 2021 Deviance: 17.708
Time: 11:11:39 Pearson chi2: 48.1
No. Iterations: 8
Covariance Type: nonrobust
==============================================================================
coef std err z P>|z| [0.025 0.975]
------------------------------------------------------------------------------
Intercept -3.1340 1.046 -2.995 0.003 -5.185 -1.083
X 3.3071 0.952 3.476 0.001 1.442 5.172
==============================================================================
예측
1로 분류될 확률을 되돌려줍니다.
preddict 이전에 매개 변수가 전달하는 설명 변수는 sm이다.add_constant (변수 데이터 설명) 를 하지 않으면 오류가 발생할 수 있습니다.モデル.predict(説明変数データ)
result.predict(X_train)
0 0.527843
1 0.999978
2 0.999281
3 0.997063
4 0.995389
...
95 0.001322
96 0.000229
97 0.004302
98 0.000940
99 0.000040
AIC의 출력
result.aic
해석하다
논리 함수의 선형 예측기를 얻은 계수 값으로 바꾸면 다음과 같은 공식이 된다.
예: 슬라이스 - 19.54달러β_1달러를 1.95달러로 환전하다β_2달러가 2.02면
$$\frac{p_i}{1-p_i}=\exp(\alpha+\beta_1x_i+\beta_2f_i)=\exp(\alpha)+\exp(\beta_1x_i)+\exp(\beta_2f_i)=\exp(-19.54)+\exp(1.95x_i)+\exp(2.02f_i) $$
왼쪽은 (사건 발생 확률)/(사건 발생 확률) 의 소머리입니다. 예를 들어 $x$1이 증가하면 소머리는 $exp(1.95)=7.06달러의 배입니다.결국 아저씨의 7.06배에 주의해야 해!
덤
예측 결과 표시
깜찍하고 깜찍한 라인을 그렸네요!plt.scatter(df["X"],df["Y"])
plt.plot(df["X"],result.predict(df["X"]),"-o",linestyle='None',color="red")
plt.show()
모델에 대한 평가, 그리고.
끝맺다
Reference
이 문제에 관하여(회귀 논리(비망록)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Genchan/items/a5ab9bbd7ab67c0effe5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
# -6~6の間で等間隔に1000個の値を取得
x = np.linspace(-10,10,1000)
# 1/(1+np.exp(-x)) がロジスティック関数
plt.plot(x, ( 1/(1+np.exp(-x))) )
plt.axvline(x=0, color='red', linestyle='dotted')
plt.axhline(y=0.5, color='red', linestyle='dotted')
plt.ylabel("確率(p)")
plt.xlabel("確率変数(z)")
plt.show()
회귀 논리를 통해 파라미터를 평가하다.
(선형 조합 방정식(선형 예측기)의 절편 또는 각 계수*의 추정)
유사함수와 대수 유사함수는
$$ L(\beta_j)=\prod_i{}_n\mathrm{C}_rp_i^{y_i}(1-p_i)^{N_i-y_i} $$
양쪽의 대수를 취하면...
$$\log L({\beta_j})=\sum_i (\log {}_n\mathrm{C} _r+y_i\log(p_i)+(N_i-y_i)\log(1-p_i)) $$
이루어지다
데이터를 적절히 준비하다.# 説明変数となるデータを1項目用意
X_train_list = np.r_[np.random.normal(3 ,1, size=50), np.random.normal(-1,1,size=50)]
# 目的変数となるデータを用意
y_train_list = np.r_[np.ones(50),np.zeros(50)]
# データフレームに変換
df = pd.DataFrame(data=[X_train_list,y_train_list]).T
df.rename(columns={0:"X",1:"Y"}, inplace=True)
# 目的変数と説明変数を分ける
X_train = df[["X"]]
y_train = df[["Y"]]
display(X_train.head())
display(y_train.head())
X
0 5.207395
1 2.692299
2 1.560036
3 3.853632
4 4.804304
Y
0 1.0
1 1.0
2 1.0
3 1.0
4 1.0
sklearn.linear_model.LogiisticRegression의 경우
모형 제작
from sklearn.linear_model import LogisticRegression
# モデルのインスタンス化
model = LogisticRegression()
# 学習
model.fit(X_train,y_train)
예측 (플래그)
モデル名.predict(説明変数データ)
0과 1의 목록을 되돌려줍니다.기본적으로 임계값 0.5(=50%)를 초과하면 1로 설정하고 그렇지 않으면 0으로 설정합니다.
매개변수로 전송된 설명 변수 데이터가 DataFrame이 아니면 오류가 발생할 수 있습니다.만약 Seriese라면 틀렸을 거야.model.predict(X_train)
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
예측(확률)
モデル名.predict_proba(説明変数データ)
아라이 형식으로 0으로 분류된 확률, 1로 분류된 확률의 각 확률을 되돌려준다.model.predict_proba(X_train.iloc[0:10])
array([[2.63082246e-05, 9.99973692e-01],
[1.51340331e-02, 9.84865967e-01],
[2.12846522e-01, 7.87153478e-01],
[8.10623998e-04, 9.99189376e-01],
[7.30213967e-05, 9.99926979e-01],
[1.51565245e-02, 9.84843475e-01],
[6.95446239e-04, 9.99304554e-01],
[7.48031608e-02, 9.25196839e-01],
[1.88389023e-02, 9.81161098e-01],
[5.45899840e-04, 9.99454100e-01]])
참고로 출력만 1로 분류될 확률은モデル名.predict_proba(評価用の説明変数データ)[:, 1]
statsmodels.api의 상황
모형 제작
포인트는 sm입니다.add_constant(변수 데이터 설명)을 하지 않으면 회귀식의 절단이 나오지 않는 곳.import statsmodels.api as sm
# 定数項(切片)のために行う
X_train = sm.add_constant(X_train)
glm_binom = sm.GLM( y_train, X_train, family=sm.families.Binomial())
res = glm_binom.fit()
print(res.summary())
Generalized Linear Model Regression Results
==============================================================================
Dep. Variable: Y No. Observations: 100
Model: GLM Df Residuals: 98
Model Family: Binomial Df Model: 1
Link Function: logit Scale: 1.0000
Method: IRLS Log-Likelihood: -8.8540
Date: Thu, 25 Mar 2021 Deviance: 17.708
Time: 10:54:26 Pearson chi2: 48.1
No. Iterations: 8
Covariance Type: nonrobust
==============================================================================
coef std err z P>|z| [0.025 0.975]
------------------------------------------------------------------------------
const -3.1340 1.046 -2.995 0.003 -5.185 -1.083
X 3.3071 0.952 3.476 0.001 1.442 5.172
==============================================================================
예측
1로 분류될 확률을 되돌려줍니다.
preddict 이전에 매개 변수가 전달하는 설명 변수는 sm이다.add_constant (변수 데이터 설명) 를 하지 않으면 오류가 발생할 수 있습니다.モデル.predict(説明変数データ)
res.predict(X_train)
0 0.527843
1 0.999978
2 0.999281
3 0.997063
4 0.995389
...
95 0.001322
96 0.000229
97 0.004302
98 0.000940
99 0.000040
AIC의 출력
res.aic
statsmodels.formula.api의 상황
statsmodels.api보다 더 세밀하게 지정할 수 있습니까
모형 제작
formura에서 열거한 변수와 설명 변수
R처럼 "전체적으로 이 열과 이 열을 뽑아라!"이렇게 지목하면 안 돼요?import statsmodels.formula.api as smf
# 線形予測子を定義 「1+」は切片
formula = "Y~1+X"
# リンク関数を選択
link = sm.genmod.families.links.logit
# 誤差構造(損失関数)を選択
family = sm.families.Binomial(link=link)
mod = smf.glm(formula=formula, data=df, family=family )
result = mod.fit()
print(result.summary())
Generalized Linear Model Regression Results
==============================================================================
Dep. Variable: Y No. Observations: 100
Model: GLM Df Residuals: 98
Model Family: Binomial Df Model: 1
Link Function: logit Scale: 1.0000
Method: IRLS Log-Likelihood: -8.8540
Date: Thu, 25 Mar 2021 Deviance: 17.708
Time: 11:11:39 Pearson chi2: 48.1
No. Iterations: 8
Covariance Type: nonrobust
==============================================================================
coef std err z P>|z| [0.025 0.975]
------------------------------------------------------------------------------
Intercept -3.1340 1.046 -2.995 0.003 -5.185 -1.083
X 3.3071 0.952 3.476 0.001 1.442 5.172
==============================================================================
예측
1로 분류될 확률을 되돌려줍니다.
preddict 이전에 매개 변수가 전달하는 설명 변수는 sm이다.add_constant (변수 데이터 설명) 를 하지 않으면 오류가 발생할 수 있습니다.モデル.predict(説明変数データ)
result.predict(X_train)
0 0.527843
1 0.999978
2 0.999281
3 0.997063
4 0.995389
...
95 0.001322
96 0.000229
97 0.004302
98 0.000940
99 0.000040
AIC의 출력
result.aic
해석하다
논리 함수의 선형 예측기를 얻은 계수 값으로 바꾸면 다음과 같은 공식이 된다.
예: 슬라이스 - 19.54달러β_1달러를 1.95달러로 환전하다β_2달러가 2.02면
$$\frac{p_i}{1-p_i}=\exp(\alpha+\beta_1x_i+\beta_2f_i)=\exp(\alpha)+\exp(\beta_1x_i)+\exp(\beta_2f_i)=\exp(-19.54)+\exp(1.95x_i)+\exp(2.02f_i) $$
왼쪽은 (사건 발생 확률)/(사건 발생 확률) 의 소머리입니다. 예를 들어 $x$1이 증가하면 소머리는 $exp(1.95)=7.06달러의 배입니다.결국 아저씨의 7.06배에 주의해야 해!
덤
예측 결과 표시
깜찍하고 깜찍한 라인을 그렸네요!plt.scatter(df["X"],df["Y"])
plt.plot(df["X"],result.predict(df["X"]),"-o",linestyle='None',color="red")
plt.show()
모델에 대한 평가, 그리고.
끝맺다
Reference
이 문제에 관하여(회귀 논리(비망록)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Genchan/items/a5ab9bbd7ab67c0effe5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
# 説明変数となるデータを1項目用意
X_train_list = np.r_[np.random.normal(3 ,1, size=50), np.random.normal(-1,1,size=50)]
# 目的変数となるデータを用意
y_train_list = np.r_[np.ones(50),np.zeros(50)]
# データフレームに変換
df = pd.DataFrame(data=[X_train_list,y_train_list]).T
df.rename(columns={0:"X",1:"Y"}, inplace=True)
# 目的変数と説明変数を分ける
X_train = df[["X"]]
y_train = df[["Y"]]
display(X_train.head())
display(y_train.head())
X
0 5.207395
1 2.692299
2 1.560036
3 3.853632
4 4.804304
Y
0 1.0
1 1.0
2 1.0
3 1.0
4 1.0
from sklearn.linear_model import LogisticRegression
# モデルのインスタンス化
model = LogisticRegression()
# 学習
model.fit(X_train,y_train)
モデル名.predict(説明変数データ)
model.predict(X_train)
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
モデル名.predict_proba(説明変数データ)
model.predict_proba(X_train.iloc[0:10])
array([[2.63082246e-05, 9.99973692e-01],
[1.51340331e-02, 9.84865967e-01],
[2.12846522e-01, 7.87153478e-01],
[8.10623998e-04, 9.99189376e-01],
[7.30213967e-05, 9.99926979e-01],
[1.51565245e-02, 9.84843475e-01],
[6.95446239e-04, 9.99304554e-01],
[7.48031608e-02, 9.25196839e-01],
[1.88389023e-02, 9.81161098e-01],
[5.45899840e-04, 9.99454100e-01]])
モデル名.predict_proba(評価用の説明変数データ)[:, 1]
import statsmodels.api as sm
# 定数項(切片)のために行う
X_train = sm.add_constant(X_train)
glm_binom = sm.GLM( y_train, X_train, family=sm.families.Binomial())
res = glm_binom.fit()
print(res.summary())
Generalized Linear Model Regression Results
==============================================================================
Dep. Variable: Y No. Observations: 100
Model: GLM Df Residuals: 98
Model Family: Binomial Df Model: 1
Link Function: logit Scale: 1.0000
Method: IRLS Log-Likelihood: -8.8540
Date: Thu, 25 Mar 2021 Deviance: 17.708
Time: 10:54:26 Pearson chi2: 48.1
No. Iterations: 8
Covariance Type: nonrobust
==============================================================================
coef std err z P>|z| [0.025 0.975]
------------------------------------------------------------------------------
const -3.1340 1.046 -2.995 0.003 -5.185 -1.083
X 3.3071 0.952 3.476 0.001 1.442 5.172
==============================================================================
モデル.predict(説明変数データ)
res.predict(X_train)
0 0.527843
1 0.999978
2 0.999281
3 0.997063
4 0.995389
...
95 0.001322
96 0.000229
97 0.004302
98 0.000940
99 0.000040
res.aic
import statsmodels.formula.api as smf
# 線形予測子を定義 「1+」は切片
formula = "Y~1+X"
# リンク関数を選択
link = sm.genmod.families.links.logit
# 誤差構造(損失関数)を選択
family = sm.families.Binomial(link=link)
mod = smf.glm(formula=formula, data=df, family=family )
result = mod.fit()
print(result.summary())
Generalized Linear Model Regression Results
==============================================================================
Dep. Variable: Y No. Observations: 100
Model: GLM Df Residuals: 98
Model Family: Binomial Df Model: 1
Link Function: logit Scale: 1.0000
Method: IRLS Log-Likelihood: -8.8540
Date: Thu, 25 Mar 2021 Deviance: 17.708
Time: 11:11:39 Pearson chi2: 48.1
No. Iterations: 8
Covariance Type: nonrobust
==============================================================================
coef std err z P>|z| [0.025 0.975]
------------------------------------------------------------------------------
Intercept -3.1340 1.046 -2.995 0.003 -5.185 -1.083
X 3.3071 0.952 3.476 0.001 1.442 5.172
==============================================================================
モデル.predict(説明変数データ)
result.predict(X_train)
0 0.527843
1 0.999978
2 0.999281
3 0.997063
4 0.995389
...
95 0.001322
96 0.000229
97 0.004302
98 0.000940
99 0.000040
result.aic
plt.scatter(df["X"],df["Y"])
plt.plot(df["X"],result.predict(df["X"]),"-o",linestyle='None',color="red")
plt.show()
Reference
이 문제에 관하여(회귀 논리(비망록)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Genchan/items/a5ab9bbd7ab67c0effe5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)