<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>grace_j.log</title>
        <link>https://velog.io/</link>
        <description>Pitapat </description>
        <lastBuildDate>Mon, 26 Dec 2022 23:57:20 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>grace_j.log</title>
            <url>https://velog.velcdn.com/images/grace_j/profile/2cf0f8b0-e3c4-46d4-a4ed-caa747163745/social_profile.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. grace_j.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/grace_j" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[인공지능을 위한 선형대수 1]]></title>
            <link>https://velog.io/@grace_j/%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5%EC%9D%84-%EC%9C%84%ED%95%9C-%EC%84%A0%ED%98%95%EB%8C%80%EC%88%98</link>
            <guid>https://velog.io/@grace_j/%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5%EC%9D%84-%EC%9C%84%ED%95%9C-%EC%84%A0%ED%98%95%EB%8C%80%EC%88%98</guid>
            <pubDate>Mon, 26 Dec 2022 23:57:20 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>에드위드 - 인공지능을 위한 선형대수 by 주재걸 교수님</p>
</blockquote>
<h2 id="선형-시스템-및-선형-변환">선형 시스템 및 선형 변환</h2>
<h3 id="행렬-곱">행렬 곱</h3>
<ul>
<li>AB과 BA는 같지않음. 교환법칙(commutative) 성립 안됨</li>
<li>행렬의 곱셈 : A x B의 경우 A의 col과 B의 row 사이즈 같아야함.</li>
<li>분배법칙 성립 A(B+C) = AB + AC</li>
<li>transpose시 순서가 바뀌는 성질</li>
<li>역행렬의 경우 순서가 바뀌는 성질</li>
</ul>
<h3 id="선형-방정식linear-equation">선형 방정식(Linear Equation)</h3>
<ul>
<li>a1x1+a2x2+...+anxn = b &lt;=&gt; a^T+x=b(두 방정식은 같은것)</li>
<li>소문자는 벡터, 대문자는 행렬</li>
<li>Linear System : 연립방정식의 집합</li>
</ul>
<h3 id="항등행렬">항등행렬</h3>
<ul>
<li>정사각형 행렬이면서, 대각선은 1이고 나머지는 0인 행렬.
Inx=x -&gt; 어떤 항등 행렬과 곱해져도 자기자신</li>
</ul>
<h3 id="역행렬">역행렬</h3>
<ul>
<li>기본 행렬에 역행렬을 곱할 때 항상 항등행렬
<img src="https://velog.velcdn.com/images/grace_j/post/a4da4a5d-cbce-4101-8f36-ac3ef5c7d75f/image.png" alt=""></li>
<li>ad=bc의 경우 역행렬 존재하지 않음</li>
</ul>
<p><img src="https://velog.velcdn.com/images/grace_j/post/23b53237-b183-4a1b-92e7-fd19f93af276/image.png" alt="">
몸무게, 키, 흡연 유무 등의 특성들을 가진 사람들의 수명을 표현한 방정식을 통해서 어떤 것이 얼마나 큰 가중치를 갖는지 계산 가능. </p>
<h3 id="역행렬이-없는-행렬">역행렬이 없는 행렬</h3>
<ul>
<li>no solution or infinitely many solutions(변수와 방정식 간의 관계를 통하여)</li>
<li>비율이 똑같을 때 (ad=bc)</li>
</ul>
<h3 id="머신러닝에-적용">머신러닝에 적용</h3>
<p>=&gt; regulization을 통해 만족하는 모든 해 중에서 risk를 최소화 하는 coefficient(가중치)를 안정한 솔루션으로 판단.
(해를 만족하는 선형 방정식 내에서 linear 전체 부분에서 학습데이터에서 동일한 성능을 내도 위치가 어디냐에 따라 테스트의 경우에 다른 성능을 낼 수 있으므로 그것이 최소화 되는 해를 구하게 됨)</p>
<h3 id="선형-결합">선형 결합</h3>
<ul>
<li>p개의 벡터에 각 상수배를 해서 더해주는 것. 가능한 선형 결합들을 다 모아 늘리면 = 평면 (span), 3차원의 부분집합
선형결합의 가중치를 잘 조합하여 원하는 벡터를 만들 수 있느냐(3개의 재료 벡터를 이용해서 원하는 span에 포함하는 선형 결합으로 표현할 수 있으냐)
<img src="https://velog.velcdn.com/images/grace_j/post/3b547dc7-35d9-451a-ae9e-97e2c88ff941/image.png" alt=""></li>
<li>벡터들의 sum of outer products를 사용하여 완벽하진않지만 근사하게 엄청 커다란 행렬들을 표현 할 수 있음.(아래의 경우는 완벽하게 같음)  <img src="https://velog.velcdn.com/images/grace_j/post/4764c386-94b5-41a0-99b0-2da7d413c1bb/image.png" alt=""></li>
</ul>
<h3 id="선형독립">선형독립</h3>
<ul>
<li>a1x1+a2x2+a3x3 = b 를 만족하는 x들의 해가 unique한 경우</li>
<li>해가 여러개가 존재할 경우 선형의존이 됨.(linealy dependent) 여러개의 평행 사변형을 그릴 수 있음. 두개로 만든 span에 나머지 재료 벡터가 포함되는지 아닌지로 독립인지 의존인지 알 수 있음. </li>
</ul>
<h3 id="선형변환">선형변환</h3>
<ul>
<li>T(cu + dv ) = cT(u) +dT(v)</li>
<li>뉴럴 넷에서 풀리 커넥티드 레이어의 기본적인 변환</li>
<li>모눈 종이를 평행사변형의 꼴로 만들어주는 것(non linear의 경우 구겨짐)</li>
<li>이것을 통해 bias를 해결 </li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[혼자 공부하는 머신러닝 + 딥러닝 4]]></title>
            <link>https://velog.io/@grace_j/%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EB%94%A5%EB%9F%AC%EB%8B%9D-4</link>
            <guid>https://velog.io/@grace_j/%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EB%94%A5%EB%9F%AC%EB%8B%9D-4</guid>
            <pubDate>Fri, 23 Dec 2022 06:22:02 GMT</pubDate>
            <description><![CDATA[<h3 id="4-1로지스틱-회귀">4. 1로지스틱 회귀</h3>
<p>&quot;K 최근접 이웃은 주변 이웃을 찾아주니까 이웃의 클래스 비율을 확률이라고 출력하면 되지 않을까?&quot;</p>
<ul>
<li><p>다중 분류 : 타깃 데이터에 2개 이상의 클래스가 포함된 문제</p>
</li>
<li><p>로지스틱 회귀 : 이름은 회귀이지만 분류 모델(기준이 되는 점은 사이킷런에서 음성 클래스로 판단), 선형 회귀와 동일하게 선형 방정식을 학습.
  확률을 결과로 내고 싶을 때 시그모이드 함수 / 로지스틱 함수를 사용하면 가능
  시그모이드의 방정식은 양 옆이 0,1로 수렴하는 그래프를 만들 수 있기 때문에 복잡한 계산으로 제작</p>
</li>
<li><p>LogisticRegression은 기본적으로 릿지 회귀와 같이 계수의 제곱을 규제 -&gt; L2규제(제어 매개변수는 C)</p>
</li>
<li><p>이진분류는 샘플마다 2개의 확률을 출력하고 다중 분류는 샘플마다 클래스 개수만큼 확률을 출력. 다중 분류는 클래스마다 Z값을 하나씩 게싼, 가장 높은 z값을 출력하는 클래스가 예측 클래스</p>
</li>
<li><p>이진 분류에서는 시그모이드로 z를 변환, 다중 분류는 소프트맥스 함수를 사용하여 z값을 확률로 변환. 소프트맥스 함수는 여러개의 선형 방정식의 출력값을 0~1 사이로 압축하고 전체 합이 1이 되도록 만듬(정규화된 지수함수)</p>
</li>
<li><p>분류 모델은 예측뿐만 아니라 예측의 근거가 되는 확률을 출력, 로지스틱 회귀는 회귀 모델이 아닌 분류 모델 - 선형 회귀처럼 선형 방정식을 사용  -&gt; 값을 0~1사이로 압축하여 확률로 이해. 로지스틱 회귀는 이진 분류에서는 하나의 선형 방정식을 훈련. 다중 분류일 경우에는 클래스 개수만큼 방정식을 훈련하고 출력값을 소프트맥스 함수를 통과시켜 전체클래스 값이 항상 1이 되게 함.</p>
</li>
</ul>
<pre><code>import pandas as pd

fish = pd.read_csv(&#39;https://bit.ly/fish_csv_data&#39;)
fish.head()

print(pd.unique(fish[&#39;Species&#39;]))

fish_input = fish[[&#39;Weight&#39;,&#39;Length&#39;,&#39;Diagonal&#39;,&#39;Height&#39;,&#39;Width&#39;]].to_numpy()

print(fish_input[:5])

fish_target = fish[&#39;Species&#39;].to_numpy()

from sklearn.model_selection import train_test_split

train_input, test_input, train_target, test_target = train_test_split(
    fish_input, fish_target, random_state=42)

from sklearn.preprocessing import StandardScaler

ss = StandardScaler()
ss.fit(train_input)
train_scaled = ss.transform(train_input)
test_scaled = ss.transform(test_input)

from sklearn.neighbors import KNeighborsClassifier
kn = KNeighborsClassifier(n_neighbors=3)
kn.fit(train_scaled, train_target)
print(kn.score(train_scaled,train_target))
print(kn.score(test_scaled,test_target))

print(kn.classes_)
print(kn.predict(test_scaled[:5]))

import numpy as np
proba = kn.predict_proba(test_scaled[:5])
print(np.round(proba, decimals=4))

distances, indexes = kn.kneighbors(test_scaled[3:4])
print(train_target[indexes])

bream_smelt_indexes = (train_target == &#39;Bream&#39;)| (train_target == &#39;Smelt&#39;)
train_bream_smelt = train_scaled[bream_smelt_indexes]
target_bream_smelt = train_target[bream_smelt_indexes]

from sklearn.linear_model import LogisticRegression
lr = LogisticRegression()
lr.fit(train_bream_smelt,target_bream_smelt)
print(lr.predict(train_bream_smelt[:5]))
print(lr.predict_proba(train_bream_smelt[:5]))
print(lr.classes_)
print(lr.coef_, lr.intercept_)

decisions = lr.decision_function(train_bream_smelt[:5])
print(decisions)

from scipy.special import expit
print(expit(decisions))

lr = LogisticRegression(C=20, max_iter=1000)
lr.fit(train_scaled, train_target)
print(lr.score(train_scaled, train_target))
print(lr.score(test_scaled, test_target))
print(lr.predict(test_scaled[:5]))
print(lr.predict_proba(test_scaled[:5]))
proba = lr.predict_proba(test_scaled[:5])
print(np.round(proba,decimals=3))

decision = lr.decision_function(test_scaled[:5])

from scipy.special import softmax
proba = softmax(decision, axis=1)
print(np.round(proba,decimals=3))</code></pre><p><img src="https://velog.velcdn.com/images/grace_j/post/01f1af7a-fdb4-4883-892f-96840dee4f4a/image.png" alt=""></p>
<blockquote>
</blockquote>
<ul>
<li>로지스틱 회귀는 선형 방정식을 사용한 분류 알고리즘. 선형 회귀와 달리 시그모이드나 소프트맥스를 사용하여 클래스 확률을 출력</li>
<li>다중 분류 : 타깃 클래스가 2개 이상인 분류 문제. 로지스틱 회귀는 다중 분류를 위해 소프트맥스 함수를 사용하여 클래스를 예측.</li>
<li>시그모이드 함수 : 선형 방정식의 출력을 0과1 사이의 값으로 압축하며 이진 분류를 위해 사용.</li>
<li>소프트맥스 함수 : 다중 분류에서 여러 선형 방정식의 출력 결과를 정규화하여 합이 1이 되도록 만듬.</li>
</ul>
<blockquote>
</blockquote>
<p>scikit-learn</p>
<ul>
<li>LogisticRegression : 선형 분류 알고리즘인 로지스틱 회귀를 위한 클래스. penalty 매개변수에서 L2규제(릿지 방식)와 L1규제(라쏘 방식)선택 가능. c 매개변수에서 규제의 강도를 제어</li>
<li>predict_proba() : 예측 확률을 반환. 이진 분류의 경우에는 샘플마다 음성 클래스와 양성 클래스에 대한 확률을 반환. 다중 분류의 경우에는 샘플마다 모든 클래스에 대한 확률을 반환.</li>
<li>decision_function() : 모델이 학습한 선형 방정식의 출력을 반환</li>
</ul>
<h3 id="4-2-확률적-경사-하강법stochastic-gradient-descent">4. 2 확률적 경사 하강법(Stochastic Gradient Descent)</h3>
<ul>
<li><p>점진적 학습 : 이전 훈련한 모델을 버리지 않고 새로운 데이터에 대해서만 조금씩 더 훈련</p>
</li>
<li><p>확률적 경사 하강법 : 대표적인 점진적 학습 알고리즘. 확률적(무작위하게, 랜덤하게), 경사(기울기), 하강법(내려가는 법), 가장 가파른 경사를 따라 원하는 지점에 도달하는 것이 목표인 경사 하강법(경사를 따라 내려가는 법). 훈련세트에서 랜덤하게 하나의 샘플을 고르는 것. 훈련 세트를 사용해 최적의 손실함수로 조금씩 이동하는 알고리즘.</p>
</li>
<li><p>에포크 : 확률적 경사 하강법에서 훈련 세트를 한번 모두 사용하는 과정(일반적으로 수십, 수백번 이상 에포크를 수행)</p>
</li>
<li><p>미니배치 경사 하강법(minibatch gradient descent) : 여러개의 샘플을 사용해 경사 하강법을 수행하는 방식</p>
</li>
<li><p>신경망 모델이 확률적 경사 하강법이나 미니배치 경사 하강법을 꼭 사용.</p>
</li>
<li><p>손실 함수 : 어떤 문제에서 머신러닝 알고리즘이 얼마나 엉터리인지를 측정하는 기준(작을 수록 좋지만 어떤 값이 최솟값인지는 모름)</p>
</li>
<li><p>손실 함수는 샘플 하나에 대한 손실을 정의하고, 비용함수(cost function)은 훈련 세트에 있는 모든 샘플에 대한 손실 함수의 합을 말함.</p>
</li>
<li><p>로지스틱 손실함수(logitic loss function) : -log(예측확률) 
= 크로스엔트로피 손실함수(cross-entropy loss function)</p>
</li>
<li><p>이진 분류는 로지스틱 손실 함수를 사용하고 다중 분류는 크로스엔트로피 손실 함수를 사용. 회귀에서는 평균 제곱 오차를 많이사용(mean squared error) </p>
</li>
<li><p>표준화 전처리 팁 : 꼭 훈련 세트에서 학습한 통계값으로 테스트 세트도 변환해야함.</p>
<pre><code>import pandas as pd
fish = pd.read_csv(&quot;https://bit.ly/fish_csv_data&quot;)
fish_input = fish[[&#39;Weight&#39;,&#39;Length&#39;,&#39;Diagonal&#39;,&#39;Height&#39;,&#39;Width&#39;]].to_numpy()
fish_target=fish[&#39;Species&#39;].to_numpy()
</code></pre></li>
</ul>
<p>from sklearn.model_selection import train_test_split
train_input, test_input, train_target, test_target = train_test_split(fish_input, fish_target,random_state=42)</p>
<p>from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
ss.fit(train_input)
train_scaled = ss.transform(train_input)
test_scaled = ss.transform(test_input)</p>
<p>from sklearn.linear_model import SGDClassifier
sc = SGDClassifier(loss=&#39;log&#39;,max_iter=100, tol=None, random_state=42)
sc.fit(train_scaled, train_target)
print(sc.score(test_scaled,test_target))
print(sc.score(train_scaled, train_target))</p>
<pre><code>
![](https://velog.velcdn.com/images/grace_j/post/aceb6c87-80e4-434d-8190-bd61746f7be8/image.png)
적은 에포크 횟수 동안에 훈련한 모델은 훈련세트와 테스트 세트에 잘 안맞는 과소적합된 모델일 가능성 높음
많은 에포크 동안 훈련한 모델은 훈련세트에 너무 잘맞아 테스트 세트에는 오히려 점수가 나쁜 과대적합된 모델일 가능성이 높음. 

* 조기종료 : 과대적합이 시작하기 전에 훈련을 멈추는 것

* 힌지손실(hinge loss) : 서포트 벡터 머신이라 불리는 또다른 머신러닝 알고리즘을 위한 손실 함수

&gt; scikit-learn
- SGDClassifier : 확률적 경사 하강법을 사용한 분류 모델을 만듬. loss 매개변수는 확률적 경사 하강법으로 최적화할 손실 함수를 지정. 로지스틱 회귀를 위해서는 &#39;log&#39;로 지정. max_iter 매개변수는 에포크 횟수를 지정 
- SGDRegressor : 확률적 경사 하강법을 사용한 회귀모델을 만듬.
</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[혼자 공부하는 머신러닝 + 딥러닝 1,2,3]]></title>
            <link>https://velog.io/@grace_j/%ED%98%BC%EA%B3%B5%EB%A8%B8%EC%8B%A0Chapter123</link>
            <guid>https://velog.io/@grace_j/%ED%98%BC%EA%B3%B5%EB%A8%B8%EC%8B%A0Chapter123</guid>
            <pubDate>Wed, 30 Nov 2022 02:11:45 GMT</pubDate>
            <description><![CDATA[<h2 id="1-데이터-다루기-classifier">1. 데이터 다루기, Classifier</h2>
<h3 id="기초-지식">기초 지식</h3>
<ol>
<li>특성 : 데이터를 표현하는 하나의 성질</li>
<li>훈련 : 머신러닝 알고리즘이 데이터에서 규칙을 찾는 과정 (사이킷런에서 fit() method의 역할)</li>
<li>정확도 : 정확히 맞친 개수 / 전체 데이터 개수</li>
<li>모델 : 알고리즘이 구현된 객체 혹은 알고리즘 자체</li>
</ol>
<blockquote>
<p>scikit-learn</p>
</blockquote>
<ul>
<li>KNeighborsClassifier() : n_neighbors매개변수로 이웃의 개수를 지정, k-최근접 이웃 분류(가까운 이웃 참고 정답 예측) 모델을 만드는 사이킷런 클래스. n_jobs를 -1로 설정 시 모든 CPU 코어를 사용
<img src="https://velog.velcdn.com/images/grace_j/post/4733c1e9-ade3-409c-a622-ba33f313256b/image.png" alt="">
<em>위와 같은 산점도에서 특정위치의 생선이 무엇일지 주변 값을 이용하여 예측</em></li>
<li>fit() : 모델을 훈련</li>
<li>predict() : 모델을 훈련하고 예측 </li>
<li>score() : 성능 측정</li>
</ul>
<h2 id="2-데이터-전처리">2. 데이터 전처리</h2>
<h3 id="개념들">개념들</h3>
<ul>
<li>지도학습 : 입력과 타깃을 전달하여 모델을 훈련한 다음 새로운 데이터를 예측하는 데 활용</li>
<li>비지도 학습 : 입력 데이터에서 어떤 특징을 찾는 데 주로 활용</li>
<li>데이터 전처리(data preprocessing) : 머신러닝 모델에 훈련 데이터를 주입 전 가공하는 단계, 알고리즘들은 샘플 간의 거리에 영향을 많이 받으므로 특성값을 일정한 기준으로 맞춰야함.</li>
<li>샘플링 편향(sampling bias) : 훈련 세트와 테스트 세트에 샘플이 골고루 섞여 있지 않은 경우(도미와 빙어가 골고루 섞인 세트들이 필요)</li>
<li>표준점수(standard score) : 훈련 세트의 스케일을 바꾸는 방법중 하나(특성의 평균 빼고 나누기 표준편차)</li>
<li>브로드캐스팅 : 다른 크기의 넘파이 배열을 자동으로 사칙연산 등 모든 행이나 열로 확장하여 수행 </li>
<li>테스트세트 스케일을 바꿀 때도 훈련 세트의 mean,std를 이용하여 변환해야함</li>
</ul>
<blockquote>
<p>scikit-learn</p>
</blockquote>
<ul>
<li>train_test_split() : 훈련 데이터를 훈련 세트와 테스트 세트로 나누는 함수, 비율은 test_size로 지정할 수 있으면 기본값 0.25 <pre><code>// 예시
train_input, test_input, train_target, test_target = train_test_split(perch_full, perch_weight, random_state=42)
// stratify 매개변수에 타깃 데이터를 전달 하면 클래스 비율에 맞게 데이터를 나눔. </code></pre><img src="https://velog.velcdn.com/images/grace_j/post/2b11d152-7216-4356-9cc8-91cf62259998/image.png" alt="">
위의 경우 파란색이 train, 주황색이 test(왼쪽 아래는 빙어, 오른쪽위는 도미)
<img src="https://velog.velcdn.com/images/grace_j/post/18a0689b-26d7-4284-bafd-280aaa225cdf/image.png" alt="">
범위 스케일 조정의 경우 </li>
</ul>
<h2 id="3-회귀-알고리즘과-모델-규제">3. 회귀 알고리즘과 모델 규제</h2>
<h3 id="31-regression">3.1 regression</h3>
<ul>
<li>지도 학습 : 분류 / 회귀(Regression)<pre><code>      1) 분류 : 샘플을 몇개의 클래스 중 하나로 분류하는 문제
      2) 회귀 : 임의의 어떤 숫자를 예측하는 문제, 임의의 수치를 출력(두 변수 사이의 상관관계를 분석하는 방법)</code></pre></li>
<li>k-최근접 이웃 회귀 알고리즘 : KNeighborsRegressor()</li>
<li>결정 계수(R^2) : 회귀의 성능 측정도구(1에 가까울수록 좋음)</li>
<li>과대적합(overfitting) : 훈련 세트 점수는 좋은데 테스트 세트에서 점수가 굉장히 나쁘다면 모델이 훈련 세트에 오버피팅된 경우
(훈련 세트 점수가 너무 높으면 과대적합, 그 반대거나 두 점수가 모두 낮으면 과소적합, 과소적합의 경우 모델이 너무단순하거나 데이터크기가 작을 경우)</li>
</ul>
<blockquote>
<p>method</p>
</blockquote>
<ul>
<li><p>score() : 출력값이 높을 수록 좋음. 정확도나 결정계수 또한.</p>
</li>
<li><p>numpy의 reshape() : 바꾸려는 배열의 크기를 지정.(원본 배열 원소의 개수와 새로 지정한 크기가 같아야함, 크기에 -1을 지정하면 나머지 원소 개수로 모두 채우라는 의미)</p>
<pre><code>train_input = train_input.reshape(-1,1)</code></pre><p>scikit-learn method</p>
</li>
<li><p>KNeighborsRegressor : k-최근접 이웃 회귀 모델을 만듬(이웃 샘플의 타깃값의 평균)</p>
</li>
<li><p>mean_absolute_error : 타깃과 예측의 절댓값 오차를 평균하여 반환 </p>
<pre><code># 테스트 세트에 대한 평균 절댓값 오차를 계산
mae = mean_absolute_error(test_target, test_prediction)</code></pre><h3 id="32-linear-regression">3.2 linear regression</h3>
<ul>
<li>시간과 환경이 변화하면서 데이터도 바뀌기 때문에 주기적으로 새로운 훈련 데이터로 모델을 다시 훈련해야함.</li>
<li>선형 회귀(linear regression) : 특성이 하나인 경우 어떤 직선을 학습하는 알고리즘.
y = ax + b(기울기를 계수-coef, 가중치-weight라고 부름)</li>
</ul>
</li>
<li><p>모델 파라미터 : 머신 러닝 알고리즘이 찾은 값(많은 머신러닝 알고리즘의 훈련 과정을 최적의 모델 파라미터를 찾는 것 = 모델 기반 학습)</p>
</li>
<li><p>다항 회귀 : 다항식을 사용한 선형 회귀(2차 방정식의 그래프를 그리려면 길이를 제곱한 항이 훈련 세트에 추가되어야 함.) 
<em>다른 변수로 치환가능하므로 다항 회귀도 선형 회귀</em>
<img src="https://velog.velcdn.com/images/grace_j/post/0d37e9ab-855f-4bcb-8a7c-85895972607a/image.png" alt=""></p>
</li>
</ul>
<blockquote>
<p>scikit-learn method                   </p>
</blockquote>
<ul>
<li>LinearRegression() : 선형 회귀 클래스
fit_intercept 매개변수를 False로 지정 시 절편을 학습 하지 않음. <pre><code>from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
train_input, test_input, train_target, test_target = train_test_split(perch_full, perch_weight, random_state=42)
lr = LinearRegression()
lr.fit(train_poly,train_target)</code></pre></li>
</ul>
<h3 id="33-특성-공학과-regression">3.3 특성 공학과 regression</h3>
<ul>
<li><p>선형 회귀는 특성이 많을수록 엄청난 효과를 냄</p>
</li>
<li><p>다중 회귀 : 여러개의 특성을 사용한 선형 회귀 (특성이 2개면 평면을 학습 - 타깃, 특성1, 특성2의 축들을 가짐), 특성이 많은 고차원에서는 매우 복잡한 모델을 표현</p>
</li>
<li><p>특성 공학 : 기존의 특성을 사용해 새로운 특성을 뽑아내는 작업 (각 특성을 서로 곱해서 또다른 특성을 만듬.)</p>
</li>
<li><p>변환기 : 특성을 만들거나 전처리하기 위한 다양한 클래스(훈련을 해야 변환이 가능)</p>
<pre><code>from sklearn.preprocessing import PolynomialFeatures
</code></pre></li>
</ul>
<p>poly = PolynomialFeatures(degree=5,include_bias=False)</p>
<h1 id="기본적으로-각특성을-제곱한-항을-추가하고-특성끼리-서로-곱한-항을-추가">기본적으로 각특성을 제곱한 항을 추가하고 특성끼리 서로 곱한 항을 추가</h1>
<p>poly.fit(train_input)
train_poly = poly.transform(train_input)</p>
<pre><code>* 정규화 : 규제 적용 전 정규화, 훈련 세트로 학습한 변환기를 사용해 테스트 세트까지 변환해야함</code></pre><p>from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
ss.fit(train_poly)
train_scaled = ss.transform(train_poly)
test_scaled = ss.transform(test_poly)</p>
<pre><code>* 규제 (regularization) : 모델이 훈련 세트에 과대적합 되지 않도록 만드는 것.
* ridge, lasso : 선형 회귀 모델에 규제를 추가한 모델(릿지는 선형 모델의 계수를 작게 만들어 과대적합을 완화하며 alpha매개변수로 강도를 조절, 라쏘는 릿지와달리 계수 값을 아예 0으로 만들수도 있음)</code></pre><p>from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import Ridge</p>
<p>ss = StandardScaler()
ss.fit(train_poly)
train_scaled = ss.transform(train_poly)
test_scaled = ss.transform(test_poly)</p>
<p>ridge = Ridge()
ridge.fit(train_scaled, train_target)</p>
<p>train_score = []
test_score = []
alpha_list = [0.001, 0.01, 0.1, 1, 10,100]
for alpha in alpha_list:
  ridge = Ridge(alpha=alpha)
  ridge.fit(train_scaled, train_target)
  train_score.append(ridge.score(train_scaled,train_target))
  test_score.append(ridge.score(test_scaled,test_target))</p>
<p>ridge = Ridge(alpha=0.1)
ridge.fit(train_scaled, train_target)</p>
<p>```</p>
<ul>
<li>하이퍼파라미터 : 사람이 알려줘야하는 파라미터</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Photo-realistic continuous digital zooming for an asymmetrical dual camera system]]></title>
            <link>https://velog.io/@grace_j/%EC%97%B0%EC%86%8D%EB%94%94%EC%A7%80%ED%84%B8%EC%A4%8C</link>
            <guid>https://velog.io/@grace_j/%EC%97%B0%EC%86%8D%EB%94%94%EC%A7%80%ED%84%B8%EC%A4%8C</guid>
            <pubDate>Fri, 25 Nov 2022 06:18:54 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h3 id="inpainting">Inpainting</h3>
<p>인페인팅 은 작품의 손상, 열화 또는 누락된 부분을 채워 완전한 이미지를 표현하는 보존 과정. 일반적으로 이미지 복원에 사용.
<img src="https://velog.velcdn.com/images/grace_j/post/fa304123-3bf9-455a-b6a4-d88a0fb321f9/image.png" alt=""></p>
</blockquote>
<h3 id="개요">개요</h3>
<p>듀얼 카메라를 사용한 디지털 줌 시스템은 이미지 품질 또는 샘플링 속도 등의 문제가 존재 -&gt; Wide 이미지 위에 Tele 이미지를 Inpainting 하는 알고리즘 제작</p>
<h3 id="내용">내용</h3>
<h4 id="1-전체-플로우-차트">1. 전체 플로우 차트</h4>
<p><img src="https://velog.velcdn.com/images/grace_j/post/5952d43c-fc5e-4873-a859-83d675d491b0/image.png" alt=""></p>
<p>1) 초고해상도 알고리즘 먼저 적용 -&gt; 고해상도 이미지 예측
2) 재구성 되지 않은 잠재적 텍스처 영역 선택하고, band-inpainting 알고리즘 적용하여 복구  </p>
<h4 id="2-밴드-인페인팅-알고리즘-파이프-라인">2. 밴드 인페인팅 알고리즘 파이프 라인</h4>
<p><img src="https://velog.velcdn.com/images/grace_j/post/3712a4a8-cd8e-4733-a441-2e88aab4f193/image.png" alt=""></p>
<p>1) 와이드 뷰에서 찍은 화면을 세그멘테이션 
2) 텔레뷰 이미지를 따로 획득
3) 두 이미지를 합성하여 인페인트 할 부분들(재구성이 필요한 부분)을 추출
4) 부분들 중 한 영역을 선택하여 밴드 인페인팅 진행
5) 다음 영역을 선택하여 밴드 인페인팅 진행</p>
<blockquote>
<ul>
<li>image registration : </li>
</ul>
</blockquote>
<p>1) 좌표등록 - 처음 촬영된 영상의 각 화소에 지상 좌표계의 좌표값을 부여 
2) 영상 정합 - 하나의 좌표계로 다른 세트의 데이터들을 바꾸는 과정</p>
<ul>
<li>band-inpainting : 밴드 매칭 인페인팅
영상 인페인팅은 밴드매칭과 경계제거로 분류.
밴드 매칭은 인페인팅할 영역을 둘러싸는 밴드와 그 외의 나머지 부분을 비교하여 차이가 가장 작은 영역을 채워 넣음</li>
<li>영역 분할 : 인페인팅 영역을 더 작게 나눠 각각을 밴드매칭 수행하여 가장 좋은 결과를 선택</li>
</ul>
<h3 id="결과">결과</h3>
<ol>
<li>기존 알고리즘 비해 고해상도의 줌이미지를 얻을 수 있음</li>
<li>0.1초 미만의 이미지 처리 시간을 가짐</li>
<li>줌 이미지 보간 방법 분야에서 참고 가능</li>
</ol>
<p><img src="https://velog.velcdn.com/images/grace_j/post/5c54f5e5-8a21-4895-8db1-8681ba686abe/image.png" alt=""></p>
<ul>
<li>초점 거리가 긴 카메라는 세부 정보가 풍부한 작은 시야(풍부한 직물 질감)를 제공하는 반면, 초점 거리가 짧은 카메라는 세부 정보가 부족한 넓은 시야(직물 질감 누락)를 제공</li>
</ul>
<h4 id="질문">질문</h4>
<ol>
<li>와이드 이미지랑 텔레 이미지를 동시에 따서 합성하는 개념?</li>
<li>실시간 카메라가 아닌 이미지를 이용할 경우에도 가능?(줌을 하는 부분이 가장자리가 되는 경우 등)</li>
</ol>
]]></description>
        </item>
    </channel>
</rss>