大白話5分鐘帶你走進人工智能-第二十節邏輯回歸和Softmax多分類問題(5)

???????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? 大白話5分鐘帶你走進人工智能-第二十節邏輯回歸和Softmax多分類問題(5)

上一節中,我們講解了邏輯回歸的優化,本節的話我們講解邏輯回歸做多分類問題以及傳統的多分類問題,我們用什么手段解決。

先看一個場景,假如我們現在的數據集有3個類別,我們想通過邏輯回歸建模給它區分出來。但我們知道邏輯回歸本質上是區分二分類的算法模型。難道沒有解決辦法了嗎?辦法還是有的,既然想分出3類,我們姑且稱這3個類別號為0,1,2。想通過邏輯回歸做二分類的話,那么我們就分別判斷每一條樣本數據屬不屬于0號類別,屬不屬于1號類別,屬不屬于2號類別去判斷,這樣相當于建立3個邏輯回歸的模型,分別訓練,既照顧了邏輯回歸二分類的本質,也照顧了多分類的需求。假如我們訓練出來的3個模型, 第一個模型判斷是不是1號類別的概率是0.8? 第二個模型判斷是不是2號類別的概率是0.1? 第三個模型判斷是不是3號類別的概率是 0.6 ,綜合來看0.8>0.6>0.1,所以我們對這條樣本判別為1號類別。剩下的所有樣本數據亦如此。這種用邏輯回歸解決問題的方式就是OVR( ovr? one vs rest )。這里問個問題,這三個模型判斷出來各自的概率相加結果是1 嗎?肯定不是。因為我們是對每個模型單獨訓練出來的。

我們先總結一下OVR思路就是:1,修改數據的lable。2,然后訓練N個邏輯回歸模型。3,根據輸出結果概率輸出。

這里需要注意一個問題就是樣本不均衡的問題。邏輯回歸就怕樣本不均衡,當負例比正例或者正列比負例多很多的時候,模型判斷會不準確,邏輯回歸,最喜歡的是1:1的正負例。 因為假如有一個訓練集只有一條正例,其它的全都是負例,那么哪怕把所有的條目都判斷為負例,正確率還是99%。因為在訓練過程中,我們是找了一組w帶來總的預測正確率最高,但這樣情況下當樣本不均衡的時候就會對正例特別的不公平,因為它只追求總的預測正確率最高,不管是正例還是負例,都會對少的那一部分很不公平,它會著重的想把多的預測準確了,獲得更大的收益,對它來說這個w是更好的w。所以當樣本不均衡的時候不一定會不好,但是很有可能的模型會不穩定。

怎么解決樣本不均衡的問題?

通常的辦法是對多的進行降采樣。 比如說只有30%的正例,有70%是負例,第一對70%的負例里面進行一個降采樣,不要全部的負例了。第二,創造一些新的正例樣本,屬性隨機采樣,就是說把正例樣本的每個屬性對應的值隨機采取點出來,組合出一個新的正例樣本來,這樣凡是涉及到人工創建的訓練集通常不太好,但是它是沒辦法的辦法,已經不均衡了,沒有更多的訓練集了。按理說用降采樣,但是發現不光負例多,正例還特別少,才幾十條正例這會這已經很難了,只要樣本少,誰也幫不了,神仙也救不了,唯一能自救的方法就是重采樣一下。適當的生成出一些新的訓練集,但生成的東西并不一定能代表客觀規律,這是沒辦法的事兒,確實少,也只能試一試。所以可以通過對少的樣本進行重采樣,通過對多的樣本進行降采樣,來一定程度上緩和我們樣本不均衡的問題。除此之外,使用決策樹的方法。那么它對于樣本不均衡,要比邏輯回歸要堅固的多,魯棒性要好得多,所以換句話說,需要選擇其它的算法來解決這個問題。

除此之外,我們引入一種叫softmax的方式,它比OVR對樣本不均衡的問題要稍好一些,而且它的分類效果更好。它其實就是一個跟邏輯回歸類似的一個專門解決多分類的模型,它有自己的判別函數,也有自己的損失函數,是邏輯回歸的一種拓展,邏輯回歸是softmax的一種特例。

如果現在只讓用一個模型去判斷一個5分類任務,這個模型要輸出什么?至少得輸出5個概率出來,才能判斷。只輸出兩個概率,我怎么判斷剩下3個?輸出形式一定要出現5個概率。于是它特別簡單,它就搞出了5組w,其實就有點神經網絡的感覺了。神經網絡我們還沒講,不過沒關系,你先有個大體的概念。以后我們再會對神經網絡里面softmax函數詳細解釋,因為它很重要。幾乎可以說是任何多分類問題最后的一步。我們這里就直到softmax就是一個單層的神經網絡就可以了,以下關于神經網絡解釋softmax的問題聽不懂沒關系,后面在神經網絡里面會詳細說的。咱們說五分類,5組模型,W1,W2,W3,W4,W5,現在一個x扔進來之后,要同時交給每組W算出一個結果,得到了W1^Tx,W2^Tx,W3^Tx,W4^Tx,W5^Tx,接下來把得到的每一個結果概率化輸出,為:

???????????????????? ? ? ? ? ? ? ?????????????? \frac{e^{w_{1}^{T}x}}{\sum e^{w_{i}^{T}x}}\frac{e^{w_{2}^{T}x}}{\sum e^{w_{i}^{T}x}}\frac{e^{w_{3}^{T}x}}{\sum e^{w_{i}^{T}x}}\frac{e^{w_{4}^{T}x}}{\sum e^{w_{i}^{T}x}}\frac{e^{w_{5}^{T}x}}{\sum e^{w_{i}^{T}x}}

在 softmax回歸中,我們解決的是多分類問題(相對于 logistic 回歸解決的二分類問題),類標y可以取k個不同的值(而不是兩個)因此,對于訓練集\left\{\left(x^{(1)}, y^{(1)}\right), \ldots,\left(x^{(m)}, y^{(m)}\right)\right\},我們有$y^{(i)} \in\{1,2, \ldots, k\}$,(注意此處的類別下標從 1 開始,而不是 0)。對于給定的測試輸入x,我們想用假設函數針對每一個類別j估算出概率值p(y=j|x),也就是說,我們想估計x的每一種分類結果出現的概率。

因此,我們的假設函數將要輸出一個k維(k個類別)的向量來表示這k個估計的概率值。具體地說,我們的假設函數h(θ)形式如下:

?????????? ? ? ????????????? h_{\theta}\left(x^{(i)}\right)=\left[ \begin{array}{c}{p\left(y^{(i)}=1 | x^{(i)} ; \theta\right)} \\ {p\left(y^{(i)}=2 | x^{(i)} ; \theta\right)} \\ {\vdots} \\ {p\left(y^{(i)}=k | x^{(i)} ; \theta\right)}\end{array}\right]=\frac{1}{\sum_{j=1}^{k} e^{\theta_{j}^{T} x^{(i)}}} \left[ \begin{array}{c}{e^{\theta_{1}^{T} x^{(i)}}} \\ {e^{\theta_{2}^{T} x^{(i)}}} \\ {\vdots} \\ {e^{\theta_{k}^{T} x^{(i)}}}\end{array}\right]

其中$\theta_{1}, \theta_{2}, \ldots, \theta_{k} \in \mathrm{R} \mathfrak{e}^{n+1}$是模型的參數,\frac{1}{\sum_{j=1}^{k} e^{\theta_{j}^{T} x^{(i)}}}這一項對概率分布進行歸一化,使得所有概率之和為 1。實際上就是把一個x(i)丟在一個hθ里面要輸出一組概率,比如這個例子里面要輸出5個概率,每個概率實際上它的判別函數都是它們共用同一個分母,只不過分子部分不同,第一個概率就是第一組w算出來分數扔到e的上面得出來的結果,每一個都是每一組w對于同一個x(i)的運算結果,分母又是所有分子的加和,因此它們總體的加和一定是等于1的。這個就是softmax的判別函數。

為了方便起見,我們同樣使用符號θ來表示全部的模型參數,將θ用一個k*n的矩陣來表示,k個類別,n個屬性值,每一類這這些屬性上面都對應著一組參數。該矩陣是將每組$\theta_{1}, \theta_{2}, \ldots, \theta_{k}$按照行羅列起來得到的。如下所示:

?????????????????????????????????????????????? ? ? ? ? ?? ???????????? \theta=\left[ \begin{array}{c}{-\theta_{1}^{T}-} \\ {-\theta_{2}^{T}-} \\ {\vdots} \\ {-\theta_{k}^{T}-}\end{array}\right]
有了這一組θ,我們的h(x)就可以使用了,那怎么得到最好的一組θ?還是通過最大似然來推導損失函數。我們先來看下示性函數的表示就是1,其取值規則為:1{值為真的表達式}=1,1{值為假的表達式} =0。舉例來說,表達式:1{2+2=4}的值為1 ,因為2+2=4是正確的值為真,所以1{2+2=4}的值為1。同理, 1{2+2=5}的值為 0。

回顧下邏輯回歸的損失函數:

??????????????????????????????????????????????? $-\sum_{i=1}^{m}\left(y^{(i)} \log h_{\theta}\left(x^{(i)}\right)+\left(1-y^{(i)}\right) \log \left(1-h_{\theta}\left(x^{(i)}\right)\right)\right)$

這個函數中,雖然每一項加和的部分是兩部分yi*log h(x)+(1-yi)*log (1-h(x))組成,但是因為yi不是0就是1,前面在后面就沒了,后面在前面就沒了,所以對每一條樣本來說就只能存活下來一項,這個是針對二分類來說的。把其寫成示性函數的表達就是:

??????????????????????????????????????????????? -$\sum_{i=1}^{m} \sum_{j=0}^{1} 1\left\{y^{(i)}=j\right\} \log p\left(y^{(i)}=j | x^{(i)} ; \theta\right)$

解釋下:比如一條樣本標簽真實值yi是0,根據我們上面的描述yi*log h(x)+(1-yi)*log (1-h(x))這里面只能存在一項就是后面一項。而對于示性函數來說$\sum_{j=0}^{1} 1\left\{y^{(i)}=j\right\} \log p\left(y^{(i)}=j | x^{(i)} ; \theta\right)$這個里面j是累加到1,兩個取值,j先為0的時候,yi=j=0為真。1{值為真的表達式}=1,所以當j為0的時候值保留下來,當j為1的時候yi=j=1≠0,1{值為假的表達式} =0,所以當j為1的時候值沒有累加。因此真正每一條樣本計算的就是其對應真實y的時候那一部分概率值。

而對于多分類來說我們需要像推導邏輯回歸損失函數一樣,把每一條樣本預測正確的概率連乘,使得似然最大。那多分類的每一條樣本預測正確的概率就是:

?????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ???????????? \sum_{j=1}^{k} 1\left\{y^{(i)}=j\right\} \log \frac{e^{\theta_{j}^{T} x^{(i)}}}{\sum_{l=1}^{k} e^{\theta_{l}^{T} x^{(i)}}}

在Softmax回歸中將x分類為類別j的概率為:

????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??????? h(\theta)x=p\left(y^{(i)}=j | x^{(i)} ; \theta\right)=\frac{e^{\theta_{j}^{T} x^{(i)}}}{\sum_{l=1}^{k} e^{\theta_{l}^{T} x^{(i)}}}

舉例來說,假如是3分類,這個預測就輸出3個概率,也就是3個數,對每一條樣本來說,其中第一個概率代表是我預測它最后類別是1的概率,第二個是代表我預測它類別為2的概率,第三個就是我預測它類別為3的概率,它實際的類別假如為1的話,我預測對了的概率是第一個數,第二個數還是第三個數?應該是第一個數。就從里邊挑出應該預測正確的概率放在這,這就是它正確的概率,因為對每一個樣本來說yi只能取一個值,所以里面的加和也只會存活下來一項。每一條樣本yi等于多少其對應的hθ(x)的值就留下來。比如第一個樣本真實分類是0,那就保留\frac{e^{\theta_{0}^{T} x^{(i)}}}{\sum_{l=1}^{k} e^{\theta_{l}^{T} x^{(i)}}}這一部分,第二個真實樣本類別是1 ,那就保留\frac{e^{\theta_{1}^{T} x^{(i)}}}{\sum_{l=1}^{k} e^{\theta_{l}^{T} x^{(i)}}}這一部分,第三個真實樣本分類是2,那就保留\frac{e^{\theta_{2}^{T} x^{(i)}}}{\sum_{l=1}^{k} e^{\theta_{l}^{T} x^{(i)}}}這一部分,損失函數只取決于預測對的那一項的概率,其它的概率其實損失函數角度是不關心的。所以它盡量,想讓訓練集上全部預測的總正確率最大,就需要把每條數據被預測正確的概率給連乘起來,求最大似然,加個log,連乘變連加,然后加個負號就得到這個損失函數了。最后推導出來的softmax損失函數如下:

??????????????????????????????????????? ? ? ?? ??????? J(\theta)=-\sum_{i=1}^{m} \sum_{j=1}^{k} 1\left\{y^{(i)}=j\right\} \log \frac{e^{\theta_{j}^{T} x^{(i)}}}{\sum_{l=1}^{k} e^{\theta_{l}^{T} x^{(i)}}}

可以看到,Softmax代價函數與logistic 代價函數在形式上非常類似,只是Softmax損失函數中對類標記的k個可能值進行了累加。

對于J(θ)的最小化問題,當前還沒有閉式解法。因此,我們使用迭代的優化算法(例如梯度下降法,或 L-BFGS)。經過求導,我們得到梯度公式如下:

??????????????????? ? ? ? ? ? ? ? ?? ?????? \nabla_{\theta_{j}} J(\theta)=-\frac{1}{m} \sum_{i=1}^{m}\left[x^{(i)}\left(1\left\{y^{(i)}=j\right\}-p\left(y^{(i)}=j | x^{(i)} ; \theta\right)\right)\right]

有了上面的偏導數公式以后,我們就可以將它代入到梯度下降法等算法中,來最小化J(θ)。例如,在梯度下降法的標準實現中,每一次迭代需要進行如下更新:

????????????????????????????? ? ?? ? ? ? ? ? ? ?? ????????? $\theta_{j} :=\theta_{j}-\alpha \nabla_{\theta_{j}} J(\theta)(j=1, \ldots, k)$

得到一組θ使得模型表現最好。此時得到θ就是softmax訓練出來的結果。所以不管它是什么損失函數,你總可以交給sgd或者l-bfgs進行最小化,得到一組θ使得模型表現最好。

對于softmax,你它的本質是把好幾個邏輯回歸塞到一起去了,但是它判別函數又變了變,原來是1/{1+exp(-z)},現在變成了e的z求和,有多少個z就求和多少次,加起來之后當分母,然后分子為對應部分預測的概率,這樣它們輸出的每個概率就都進行了歸一化。

softmax有一個有趣的特點:softmax的形式是有幾個分類,就有幾組w向量,比如三類,最終訓練出來的參數實際上就是θ1,θ2,θ3,原來邏輯回歸是一組θ,現在是三組θ。你把這三組θ都減去一個相同的向量φ,比如φ全是1。 假如這θ長度為五,φ是五個1也好,五個2也好,12345也好,只要把每一個θ的向量都減去同一個φ,你就會發現他們預測結果沒有任何變化。假如我拿每一個θ都減去了同一個φ,我把θj-φ當作原來的θj,即:

????????????????????????????????????????????????????????? \begin{aligned} p\left(y^{(i)}=j | x^{(i)} ; \theta\right) &=\frac{e^{\left(\theta_{j}-\psi\right)^{T} x^{(i)}}}{\sum_{l=1}^{k} e^{\left(\theta_{l}-\psi\right)^{T} x^{(i)}}} \\ &=\frac{e^{\theta_{j}^{T} x^{(i)} e^{-\psi^{T} x^{(i)}}}}{\sum_{l=1}^{k} e^{\theta_{l}^{T} x^{(i)} e^{-\psi^{T} x^{(i)}}}} \\ &=\frac{e^{\theta_{l=1}^{T} x^{(i)}}}{\sum_{l=1}^{k} e^{\theta_{l}^{T} x^{(i)}}} \end{aligned}

通過上面公式展開,也就是說減φ與不減φ不影響最終的預測結果。這說明softmax參數有冗余,既然隨便減一個φ可以,那我都給他減一個θ1,也可以,那么就是把θ1全變成零了,θ2變成θ2-θ1了,θ3變成θ3-θ1了。所以實際上我們只需要保存兩組參數就夠了。

我們再來看下Softmax回歸與Logistic 回歸的關系:當類別數k=2時,softmax 回歸退化為 logistic 回歸。這表明 softmax 回歸是 logistic 回歸的一般形式。具體地說,當k=2時,softmax 回歸的假設函數為:

????????????????????????????????????????????????????????????????????? h_{\theta}(x)=\frac{1}{e^{\theta_{1}^{T} x}+e^{\theta_{2}^{T} x^{(i)}}} \left[ \begin{array}{c}{e^{\theta_{1}^{T} x}} \\ {e^{\theta_{2}^{T} x}}\end{array}\right]

利用softmax回歸參數冗余的特點,θ1全置為0,θ2變成θ2-θ1:那么h(x)會輸出兩個結果。即:

???????????????????????????????????????????????? ? ? ? ? ? ? ? ? ? ??? h(x)=\frac{1}{e^{\overrightarrow{0}^{T} x}+e^{\left(\theta_{2}-\theta_{1}\right)^{T} x^{(i)}}} \left[ \begin{array}{c}{e^{\overrightarrow{0}^{T} x}} \\ {e^{\left(\theta_{2}-\theta_{1}\right)^{T} x} ]}\end{array}\right]

?????????????????????????????????????????????? ? ? ? ? ? ? ? ? ?? ???????????? =\left[ \begin{array}{c}{\frac{1}{1+e^{\left(\theta_{2}-\theta_{1}\right)^{T} x}}} \\ {\frac{e^{\left(\theta_{2}-\theta_{1}\right)^{T} x}}{1+e^{\left(\theta_{2}-\theta_{1}\right)^{T} x}}}\end{array}\right]

????????????????????????????????????????????????????????? ? ? ? ? ? ?? ?????? =\left[ \begin{array}{c}{\frac{1}{1+e^{\left(\theta_{2}-\theta_{1}\right)^{T} x^{(i)}}}} \\ {1-\frac{1}{1+e^{\left(\theta_{2}-\theta_{1}\right)^{T} x^{(i)}}}}\end{array}\right]

我們就會發現 softmax 回歸器預測其中一個類別的概率為\frac{1}{1+e^{\left(\theta_{2}-\theta_{1}\right)^{T} x(i)}},另一個類別的概率就是1-\frac{1}{1+e^{\left(\theta_{2}-\theta_{1}\right)^{T} x}(i)}

此時的softmax回歸就是參數為θ2-θ1的邏輯回歸

轉載于:https://www.cnblogs.com/LHWorldBlog/p/10801253.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/279584.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/279584.shtml
英文地址,請注明出處:http://en.pswp.cn/news/279584.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Exchange 2016部署實施案例篇-01.架構設計篇(上)

年前就答應大家要給大家寫一個關于Exchange規劃部署的文章,一直忙到現在也沒有倒出時間來寫這個東西。特別是節后,更是開工不利啊,各種奇葩問題,真心無語了。廢話就不多說了,開始今天的議題。 相信各位對Microsoft Exc…

bzoj 4598: [Sdoi2016]模式字符串

題目描述 給出n個結點的樹結構T&#xff0c;其中每一個結點上有一個字符&#xff0c;這里我們所說的字符只考慮大寫字母A到Z&#xff0c;再給出長度為m的模式串s&#xff0c;其中每一位仍然是A到z的大寫字母。 Alice希望知道&#xff0c;有多少對結點<u&#xff0c;v>滿足…

[譯] 機器學習可以建模簡單的數學函數嗎?

原文地址&#xff1a;Can Machine Learning model simple Math functions?原文作者&#xff1a;Harsh Sahu譯文出自&#xff1a;掘金翻譯計劃本文永久鏈接&#xff1a;github.com/xitu/gold-m…譯者&#xff1a;Minghao23校對者&#xff1a;lsvih&#xff0c;zoomdong機器學習…

下載spotify音樂_如何在Spotify上播放更高質量的音樂

下載spotify音樂With Spotify Premium, you get access to higher quality music streaming. By default (and if you’re on the free plan), Spotify streams at 96kbps on mobile and 160kbps on your computer. At these sort of bitrates, you’ll hear a small but notic…

ubuntu scp命令或者用root連接ssh提示:Permission denied, please try again.錯誤

1、su -            #&#xff01;&#xff01;&#xff01; 2、vi /etc/ssh/sshd_config 3、PermitRootLogin yes    # 找到此字段&#xff0c;改為此行所示 4、/etc/init.d/ssh restart    # 重啟ssh服務 轉載于:https://www.cnblogs.com/weiyiming007/p…

Windows下壓縮包安裝Mysql

1. 下載mysql壓縮包 2. 解壓到指定目錄&#xff0c;例如D:\Program Files\mysql-5.7.25-winx64 3. 在目錄下創建配置文件my.ini [mysqld] port 3306 basedirD:/Program Files/mysql-5.7.25-winx64 datadirD:/Program Files/mysql-5.7.25-winx64/data max_connections200 char…

如何從終端打開Ubuntu Nautilus文件瀏覽器

Recently, we showed you how to open a directory in Terminal from within Nautilus. However, what if you’re working on the command line in Terminal and need to access the same directory in Nautilus? There’s an easy solution for that. 最近&#xff0c;我們向…

mysql 面試知識點筆記(七)RR如何避免幻讀及非阻塞讀、范式

2019獨角獸企業重金招聘Python工程師標準>>> 表象&#xff1a;快照讀&#xff08;非阻塞讀&#xff09;--偽MVCC &#xff08;Multi-Version Concurrent Controll多版本并發控制&#xff09; 內在&#xff1a;next-key鎖(record鎖gap鎖) rr serializabel 都支持gap鎖…

pdf 奇數頁插入頁碼_如何在Word 2013中的奇數頁碼上啟動新部分

pdf 奇數頁插入頁碼When working on a long document or a book in Word, it’s common to divide the document into sections or chapters. A common practice is to start each new section or chapter on an odd page. This is easily accomplished using sections in Word…

徹底攻克C語言指針

前面我們講解了指針數組、二維數組指針、函數指針等幾種較為復雜的指針&#xff0c;它們的定義形式分別是&#xff1a; int *p1[6]; //指針數組int *(p2[6]); //指針數組&#xff0c;和上面的形式等價int (*p3)[6]; //二維數組指針int (*p4)(int, int); //函數指針我相信大部分…

流水線上的思考——異步程序開發模型(2)

上一期我們講了一個簡單的流水線處理流程&#xff0c;正如我們在上期最后所說那樣&#xff0c;這個簡單的流水線處理流程對于后續有慢設備操作的業務來說&#xff0c;性能有可能偏低。今天我們來討論一下如何提高性能的方法。首先讓我們來大致區分一下一般業務的處理方式。目前…

java ReentrantLock 鎖相關筆記

為什么80%的碼農都做不了架構師&#xff1f;>>> ReentrantLock重入鎖簡單理解就是對同一個線程而言&#xff0c;它可以重復的獲取鎖。例如這個線程可以連續獲取兩次鎖&#xff0c;但是釋放鎖的次數也一定要是兩次 Lock locknew ReentrantLock(true);//公平鎖 Lock …

計算機啟動程序bios_如何構建自己的計算機,第三部分:準備BIOS

計算機啟動程序biosSo you’ve carefully picked out some parts and built a computer, but it doesn’t really do anything…yet. Before we hop into installing your operating system, we need to take a quick look at the BIOS and prepare it for our operating syste…

PLSQL 之類型、變量和結構

1、類型 在《.Net程序員學用Oracle系列(5)&#xff1a;三大數據類型》一文中詳細地講述了 Oracle 的基本數據類型&#xff0c;文中還提到&#xff0c;除基本數據類型之外&#xff0c;Oracle 還在語法上支持一些非固有數值類型。 事實上&#xff0c;Oracle 在語法上支持的數據類…

kindle圖書免費下載_如何在Kindle上免費簽出圖書館書籍

kindle圖書免費下載Tired of paying so much for ebooks? Most libraries these days let you check out eBooks, for free, just like regular books. 厭倦了為電子書支付這么多錢&#xff1f; 如今&#xff0c;大多數圖書館都讓您免費閱讀電子書&#xff0c;就像普通書籍一樣…

第五章 了解你的用戶

第五章 了解你的用戶邏輯人的爭議&#xff1a;要學會把軟件開發簡單易用象牙塔式的開發&#xff1a;開發團隊常年閉封在“高塔”之中&#xff0c;一門心思的做著魔法一般的軟件。這些開發者根本就不知道用戶會怎么樣的使用他們所做的軟件。我們應該避免這種象牙塔式的開發&…

總結之:CentOS 6.4系統裁減詳解及裝載網卡步驟

前言 隨著接觸Linux的慢慢深入、對Linux也有了一個基本認識了吧&#xff0c;慢慢的接觸系統內核、系統配置文件、在了解Linux的系統啟動流程后&#xff0c;現在來總結一下一個簡單的Linux系統的裁減方法和步驟&#xff0c;一個只有內核文件和幾個簡單的命令的小Linux系統&am…

android 設備占用_如何查看正在占用Android設備的空間

android 設備占用When you picked up your shiny new Android device, you probably thought “yeah, this has plenty of storage. I’ll never fill it up!” But here you are, some number of months later with a full phone and no clue why. No worries: here’s how yo…

最近沉迷生意經

高度戰略搶占顧客心智 速度戰略 . 規模不夠就談發展速度&#xff0c;避開自己的劣勢&#xff1b; . 發展速度快說明產品好&#xff0c;受歡迎度高; 錢是工具&#xff0c;從錢上解脫 . 不能被錢所困 . 放下錢&#xff0c;才能瀟灑地使用錢 第一時間搶占顧客心智 . 核心點就是搶占…

mysql密碼正確卻提示錯誤, 不輸入密碼反而能登錄

今天部署阿里云服務器, 發現之前可以連接的mysql服務器突然連接不上了, 密碼我確認是正確的,但登錄時就是顯示密碼錯誤, 很崩潰, 差點氣得我就想重裝mysql了。 好在經過幾番苦尋找到了以下能解決我問題的資料&#xff0c; 成功解決了我的問題&#xff0c; 萬分感謝&#xff0c;…